C++資料結構之線性表
阿新 • • 發佈:2019-02-13
InitList( ):初始化順序表
Insert(int L,int Elem):在L位置插入值Elem1.檢查記憶體空間是否夠,如果實際長度大於或等於最大容量,則要用realloc擴充套件記憶體空間2.判斷插入的位置L是否合法3.如果插入到表頭或表中,則要把元素往後挪。如果插入到表尾,直接賦值。長度加一Delete(int L):刪除L位置上的元素1.檢查線性表是否為空2.判斷位置是否合法3.取出L位置的值,作為返回值4.把後邊的元素往前移,長度減一Locate(int Elem):返回Elem的位置GetElem(int L):返回L位置上的值ListLength( ):返回線性表的長度ListEmpty( ):返回布林值,線性表空返回真,不空返回假class SqList{ private: int *Head;//順序表的首地址 int length;//實際長度,從1開始 int MaxSize;//最大長度,超過這個數就要擴充套件申請的記憶體空間 public: SqList(int N); ~SqList(); void InitList();//初始化線性表 bool ListEmpty();//是否為空 int ListLength();//線性表的長度 int GetElem(int L);//獲取某個位置的值 int Locate(int Elem);//某個值的位置 int Insert(int L,int Elem);//插入 int Delete(int L);//刪除 }; SqList::SqList(int N) { MaxSize=N; length=0; Head=(int*)malloc(N*sizeof(int));//申請一塊記憶體 } SqList::~SqList() { free(Head); MaxSize=0; length=0; } void SqList::InitList() { cout<<"請輸入所有的數值:"<<endl; for (int i=0;i<MaxSize;i++) { cin>>*(Head+i); length++; } } bool SqList::ListEmpty() { if(!length)//length==0時返回真 return true; else return false; } int SqList::ListLength() { return length; } int SqList::GetElem(int L) { if (L<1||L>length) { cout<<"位置不合法"<<endl; return -1; } return *(Head+L-1); } int SqList::Locate(int Elem) { for (int i=0;i<length;i++) if (Head[i]==Elem) return i+1; cout<<"無法找到"<<endl; return -1; } int SqList::Delete(int L) { int j,elem; if (length==0) { cout<<"下溢"<<endl; return -1; } if (L<1||L>length) { cout<<"位置不合法"<<endl; return -1; } elem=*(Head+L-1); for (j=L-1;j<length-1;j++) { *(Head+j)=*(Head+j+1);//等於後一位的值 } length--; return elem; } int SqList::Insert(int L,int Elem) { int j; if (length>=MaxSize)//如果空間不夠,就要擴大申請的記憶體 { Head=(int*)realloc(Head,MaxSize*2*sizeof(int)); MaxSize+=MaxSize; } if (L<1||L>length+1) { cout<<"位置錯誤,無法插入"<<endl; return -1; } if (L!=length+1) //把L-1及之後的元素往後挪 for (j=length-1;j>=L-1;j--) { *(Head+j+1)=*(Head+j);//等於前一個的值 } *(Head+L-1)=e; length++; return 0; }