junnaxing
2018-01-10 21:13
#include<stdlib.h> #include"List.h" #include<iostream> using namespace std; int main(void) { List *list=new List(10); int e1=5; int e2=6; list->ListInsert(0,&e1); list->ListInsert(1,&e2); list->ListTraverse(); system("pause"); return 0; } #include"List.h" #include<iostream> using namespace std; List::List(int size) { m_iSize=size; m_pList=new int[m_iSize]; m_iLength=0; } List::~List() { delete []m_pList; m_pList=NULL; } void List::ClearList() { m_iLength=0; } bool List::ListEmpty() { return m_iLength==0?true:false; } int List::ListLength() { return m_iLength; } bool List::GetElem(int i,int *e) { if(i<0||i>=m_iSize) { return false; } else { *e=m_pList[i]; return true; } } int List::LocateElem(int *e) { for(int i=0;i<m_iLength;i++) { if(m_pList[i]==*e) { return i; } } return -1; } bool List::PriorElem(int *currentElem,int *preElem) { int temp=LocateElem(currentElem); if(temp==-1) { return false; } else { if(temp==0) { return false; } else { *preElem=m_pList[temp-1]; return true; } } } bool List::NextElem(int *currentElem,int *nextElem) { int temp=LocateElem(currentElem); if(temp==-1) { return false; } else { if(temp==m_iLength-1) { return false; } else { *nextElem=m_pList[temp+1]; return true; } } } void List::ListTraverse() { for(int i=0;i<m_iLength;i++) { cout << m_pList[i]<<endl; } } bool List::ListInsert(int i,int *e) { if(i<0||i>=m_iLength) { return false; } else { for(int k=m_iLength-1;k>=i;k--) { m_pList[k+1]=m_pList[k]; } m_pList[i]=*e; m_iLength++; return true; } } bool List::ListDelete(int i,int *e) { if(i<0||i>m_iLength) { return false; } else { *e=m_pList[i]; for(int j=i+1;j<m_iLength;j++) { m_pList[j-1]=m_pList[j]; } m_iLength--; return true; } } #ifndef LIST_H #define LIST_H class List { public: List(int size); ~List(); void ClearList(); bool ListEmpty(); int ListLength(); bool GetElem(int i,int *e); int LocateElem(int *e); bool PriorElem(int *currentElem,int *preElem); bool NextElem(int *currentElem,int *nextElem); void ListTraverse(); bool ListInsert(int i,int *e); bool ListDelete(int i,int *e); private: int *m_pList; int m_iSize; int m_iLength; }; #endif
ListInsert这个方法中if(i<0||i>=m_iLength) { return false;} 这个判断错了。
一开始m_iLength=0; 你执行 list->ListInsert(0,&e1);时,传入i=0 就return false;了,当然也就没法正确插入元素。
要理解m_iLength这个变量其实总是指向于数组最后一个元素的下一个元素。插入时是允许插入在该位置上的。删除时才不能删除该位置的元素。
应该改成if(i<0 || i > m_iLength) {return false;}
顺便一说,ListDelete这个方法相应的地方也是错的。
数据结构探险之线性表篇
57563 学习 · 257 问题
相似问题