山自高兮水自深,当尘雾消散,唯事实流传。
因为它有一块连续的存储空间,不管从左边用还是从右边用都有唯一的“第一个格子”和“最后一个格子”,除了两头的格子,其他的都紧挨着两个格子。
注:图片来自于互联网线性结构的基本特征:1.集合中必存在唯一的一个"第一元素";2.集合中必存在唯一的一个"最后元素";3.除最后元素在外,均有唯一的后继;4.除第一元素之外,均有唯一的前驱。线性表类代码:#ifndef seqlist_H#define seqlist_Htemplateclass seqlist{private: ElemType* sl_; int slsize_; //线性表大小 int currsize_; //插入元素的个数 public: seqlist(int size); //构建函数 ~seqlist(); //析构函数 bool Insert(int pos,ElemType item); //插入(pos>=0) bool Delete(int pos); //删除(pos>=0) inline int Length(){return slsize_;}; //返回线性表大小 inline int Size(){return currsize_;}; //返回已填入元素的大小 ElemType* Get(int pos); //(pos>=0) ElemType* Prior(int pos); //取前驱元素 ElemType* Next(int pos); //取后继元素 int Locate(ElemType elem); //定位元素的位置 void SetNull(); //置空队列 bool Empty(); //判断是否空队列};templateseqlist::seqlist(int size) { sl_ = new ElemType[size]; slsize_ = size; currsize_ = 0;}templateseqlist::~seqlist(){ delete [] sl_; }templatebool seqlist::Insert(int pos,ElemType item){ if(pos >= 0 && pos <= currsize_ && currsize_ < slsize_) { for(int i = currsize_; i >= pos; i--) { sl_[i+1] = sl_[i]; } sl_[pos] = item; currsize_ += 1; return true; } else return false;}templatebool seqlist::Delete(int pos){ if(pos >= 0 && pos < currsize_) { for(int i = pos; i < currsize_; i++) { sl_[i-1] = sl_[i]; } currsize_ -= 1; return true; } else return false;}templateElemType* seqlist::Get(int pos){ if(pos >= 0 && pos < currsize_) return &sl_[pos]; else return NULL;}templateElemType* seqlist::Prior(int pos){ return Get(pos-1);}templateElemType* seqlist::Next(int pos){ return Get(pos+1);}templateint seqlist::Locate(ElemType elem){ for(int i = 0; i < currsize_; i++) { if(elem == sl_[i]) return i+1; } return -1;}templatevoid seqlist::SetNull(){ for(int i = 0; i < currsize_; i++) { this->Delete(i); }}templatebool seqlist::Empty(){ return (currsize_ == 0)}#endif测试代码:void listall(seqlist* sl) //列出已填入元素{ cout << "cout:" << sl->Size() << endl; for(int i=0; i < sl->Size(); i++) { cout << "pos:" << i << ",item:" << *sl->Get(i) << endl; }}void seqlist_test(){ //创建对象 seqlist* sl = new seqlist(10); //倒插入8个元素 cout << "insert 8 items!" << endl; for(int i = 0; i < 8 ; i++) { sl->Insert(i,i); cout << "pos:" << i << ",Insert:" << i << endl; } //列出已填入元素 cout << "result:" << endl; listall(sl); //删除位置3上的元素 cout << "delete the 4th item!"<< endl; sl->Delete(3); cout << "result:" << endl; //列出已填入元素 listall(sl); //销毁对象 delete sl;}
发表评论
没有评论:
发表评论