顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的。只要知道了第一个元素的存储地址,就可以知道线性表中任何一个元素的存储地址
#include<iostream> using namespace std; template<class T> class Dsqlist { private: T* data; int length; int capcity; public: Dsqlist()//构造函数 :data(NULL) , length(0) , capcity(0) {} Dsqlist(const Dsqlist & list)//拷贝构造函数 : data(new int[list.length]) , length(list.length) , capcity(list.capcity) { memcpy(data,list.data,sizeof(int)*length); } ~Dsqlist()//析构函数 { if (data != NULL) { delete[] data; length = 0; capcity = 0; } } void checkcap();//测容,扩容 void push_back(int x);//尾插 void print(); void insert(int i, int x);//指定位置插入 void llength();//有效元素的长度 void lcapcity();//总容量 void erase(int i);//指定位置的删除 void pop_back();//尾删 void find(int i);//查找指定位置的元素 }; template<class T> void Dsqlist<T>::checkcap()//测容,扩容 { if (length == capcity) { capcity += 2; data =(int*) realloc(data, capcity*sizeof(int)); } } template<class T> void Dsqlist<T>::push_back(int x)//尾插 { checkcap(); data[length++] = x; } template<class T> void Dsqlist<T>::insert(int i,int x)//指定位置插入元素 { checkcap(); i--; if (i<0 || i>length) cout << "输入错误" << endl; else { int j; for (j = length; j > i; j--)//1 2 3 4 data[j] = data[j - 1]; length++; data[i] = x; } } template<class T> void Dsqlist<T>::erase(int i)//指定位置删除元素 { i--; if (i<0 || i>length) cout << "输入错误" << endl; else { int j; for (j = i; j<length; j++) data[j] = data[j + 1]; length--; } } template<class T> void Dsqlist<T>::pop_back()//尾删 { if (length == 0) cout << "空表" << endl; else length--; } template<class T> void Dsqlist<T>::find(int i)//查找指定位置的元素 { i--; if (i<0 || i>length) cout << "输入错误" << endl; else cout <<"元素为:"<< data[i]<< endl; } template<class T> void Dsqlist<T>::llength()//有效元素的长度 { cout << "长度为:" << length << endl; } template<class T> void Dsqlist<T>::lcapcity()//总容量 { cout << "容量为:" << capcity << endl; } template<class T> void Dsqlist<T>::print()//输出 { if (data == NULL) cout << "空表" << endl; else { int i; cout << "data: "; for (i = 0; i < length; i++) cout << data[i] << " "; cout << endl; } } int main() { Dsqlist<int> l1; cout << "l1.push_back(2)" << endl; cout << "l1.push_back(3)" << endl; cout << "l1.push_back(4)" << endl; l1.push_back(2); l1.push_back(3); l1.push_back(4); l1.print(); cout << "l1.insert(1,9)" << endl; l1.insert(1,9); l1.print(); cout << "l1.pop_back();" << endl; l1.pop_back(); l1.print(); cout << "l1.find(3)" << endl; l1.find(3); l1.print(); cout << "l1.erase(2)" << endl; l1.erase(2); l1.print(); l1.llength(); l1.lcapcity(); Dsqlist<int> l2(l1); cout << "Dsqlist<int> l2(l1)后"<<endl; l2.print(); return 0; }结果如下
