顺序表上进行增,删,查,改操作,C++实现
2016-10-18 23:05
369 查看
一、代码实现
二、插入操作的时间复杂度
在表中第i 个位置插入,从data[i-1] 到data [n-1] 成块后移,移动n-1-(i-1)+1 = n-i+1项。
考虑所有插入位置,相等插入概率时,从1 到 n+1,平均移动元素个数为:
二、删除操作的时间复杂度
删除第 i 个表项,需将第 i+1 项到第 n 项全部前移,需前移的项数为
n-(i+1)+1 = n-i
考虑表中所有可能删除位置(1≤i≤n-1),相等删除概率时,平均移动元素个数为:
最后,来张图,放松一下:
<pre name="code" class="java">
<span style="font-family:Arial;">#include <iostream>//是1的另一种形式 using namespace std; int defaultSize=100; template <typename T> class SeqList { private: //数据成员的定义 T* data; int maxSize; int last; public: SeqList(int sz=defaultSize); ~SeqList(); SeqList(const SeqList<T>& L); ostream& operator =(const SeqList<T>& L); bool Insert(int i,const T& elem); bool Remove(int i,T& elem); int Search(const T& elem); void Setdata(int i,const T& elem); bool Getdata(int i,T& elem); //顺序表的拷贝构造函数 void SeqList(const SeqList<T>& L) { maxSize=L.maxSize; last=L.last; data=new T[maxSize]; if(data==NULL) { cerr<<"存储分配失败"<<endl; exit(1); } for(int i=0;i<=last;i++) { data[i]=L.data[i]; } } bool IsFull() { return last==maxSize-1; } bool IsEmpty() { return last==-1; } friend ostream&operator<<(ostream& out,const SeqList<T>& L)/////friend { for(int i=0;i<=L.last;i++) { cout<<L.data[i]<<" "; } cout<<endl; return out; } }; //在这个构造函数里面创建顺序表 template <typename T> SeqList<T>::SeqList(int sz) { maxSize=sz;//创建顺序表 data=new T[maxSize];//创建顺序表 last=-1;//使线性表为空 } //用析构函数销毁顺序表。释放data所指的内存空间 template<typename T> SeqList<T>::~SeqList() { delete [] data; } template<typename T> bool SeqList<T>::Insert(int i,const T& elem) { if(last==maxSize-1) { cerr<<"线性表已满"<<endl; return false; } if(i<1 || i>last+2) { cerr<<"插入位置越界"<<endl; return false; } for(int j=last;j>=i-1;j--)//特别注意这三行 { data[j+1]=data[j]; } data[i-1]=elem; last++; return true; } template<typename T> bool SeqList<T>::Remove(int i,T& elem) { if(last==-1) { cerr<<"线性表为空"<<endl; return false; } if(i<1 || i>last+1) { cerr<<"插入位置越界"<<endl; return false; } elem=data[i-1]; for(int j=i-1;j<last;j++) { data[j]=data[j+1]; } last--; return true; } template<typename T> int SeqList<T>::Search(const T& elem) { for(int j=0;j<=last;j++) { if(data[j]==elem) { return j+1; } } return 0; } template<typename T> void SeqList<T>::Setdata(int i,const T& elem) { if(i<1 || i>last+1) { cerr<<"插入位置越界"<<endl; } else { data[i-1]=elem; } } template<typename T> bool SeqList<T>::Getdata(int i,T& elem) { if(i<1 || i>last+1) { cerr<<"插入位置越界"<<endl; return false; } elem=data[i-1]; return true; } int main() { SeqList<int> lst; SeqList<char> lstc; SeqList<double> lsts; for(int i=1;i<=10;i++) { lst.Insert(i,i); } lst.Insert(5,100); cout<<lst; cout <<lst.Search(100)<<endl; return 0; }</span>
二、插入操作的时间复杂度
在表中第i 个位置插入,从data[i-1] 到data [n-1] 成块后移,移动n-1-(i-1)+1 = n-i+1项。
考虑所有插入位置,相等插入概率时,从1 到 n+1,平均移动元素个数为:
二、删除操作的时间复杂度
删除第 i 个表项,需将第 i+1 项到第 n 项全部前移,需前移的项数为
n-(i+1)+1 = n-i
考虑表中所有可能删除位置(1≤i≤n-1),相等删除概率时,平均移动元素个数为:
最后,来张图,放松一下:
相关文章推荐
- 【数据结构】用C++实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- c++ 模板类实现 动态顺序表 基础操作
- C++实现顺序表的基本操作
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
- 顺序表基本操作C++实现
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- C++实现顺序表的常用操作(插入删出查找输出)
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现 ——感想
- TreeSet() 类逆向排序(实现compare()方法以便按正常顺序的逆向进行操作)。
- c++实现顺序表的操作
- 顺序队列的基本操作实现c++
- 顺序表的基本操作——C++实现
- C++实现线程同步的几种方式 线程同步是指同一进程中的多个线程互相协调工作从而达到一致性。之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- C++实现顺序栈,运用模板,界面友好,操作方便,运行流畅
- C++实现顺序结构线性表的基本操作
- C++中对文件进行读写操作