- 定义:一系列物理连续地址的存储单元,用来存储一系列的数据元素,一般是用数组的形式存储,(但和数组还是有一些区别),用来实现对数据的增删查改
(一)定义模板类
代码如下:
| template <class T> |
| class arrList : public List<T> { |
| private: |
| int maxSize; |
| int curLen; |
| int position; |
| T *aList ; |
| public: |
| arrList(const int size) { |
| maxSize = size; |
| aList = new T[maxSize]; |
| curLen = position = 0; |
| } |
| ~arrList() { |
| delete [] aList; |
| } |
| void clear() { |
| delete [] aList; |
| curLen = position = 0; |
| aList = new T[maxSize]; |
| } |
| int length(); |
| bool append(T value); |
| bool insert(int p, T value); |
| bool del(int p); |
| int getPos(const T value); |
| void print(); |
| }; |
(二)具体函数的实现:
构造函数:
| arrlist(const int size){ |
| maxsize=size; |
| alist=new int[maxsize]; |
| curlen=position=0; |
| } |
析构函数:
| ~arrlist(){ |
| delete[]alist; |
| } |
clear函数:
| void clear(){ |
| delete[]alist; |
| curlen=position=0; |
| alist=new int[maxsize]; |
| } |
length函数:
| int length(){ |
| return curlen; |
| } |
getpos函数:
| int getpos(const int value){ |
| for(int i=0;i<curlen;i++){ |
| if(value==alist[i]) |
| return i; |
| } |
| return -1; |
| } |
insert函数:
| bool insert(const int p,const int value){ |
| if(curlen>=maxsize){ |
| cout<<"The List is overflow"<<endl; |
| return false; |
| } |
| if(p<0||p>curlen){ |
| cout<<"Insertion point is illegal"<<endl; |
| return false; |
| } |
| for (int i = curlen; i > p; i--) { |
| alist[i] = alist[i - 1]; |
| } |
| alist[p] = value; |
| curlen++; |
| return true; |
| } |
del函数:
| bool del(const int p){ |
| if(curlen==0){ |
| cout<<"No elements to delete"<<endl; |
| return false; |
| } |
| if(p<0||p>curlen-1){ |
| cout<<"Deletion is illegal"<<endl; |
| return false; |
| } |
| for(int i=p;i<=curlen-1;i++){ |
| alist[i]=alist[i+1]; |
| } |
| curlen--; |
| return true; |
| } |
print函数:
| void print(){ |
| for(int i=0;i<curlen;i++){ |
| cout<<alist[i]; |
| } |
| cout<<endl; |
| } |
(三)完整代码:
| #include<iostream> |
| using namespace std; |
| class arrlist { |
| private: |
| int* alist; |
| int maxsize; |
| int curlen; |
| int position; |
| public: |
| arrlist(const int size) { |
| maxsize = size; |
| alist = new int[maxsize]; |
| curlen = position = 0; |
| } |
| ~arrlist() { |
| delete[]alist; |
| } |
| void clear() { |
| delete[]alist; |
| curlen = position = 0; |
| alist = new int[maxsize]; |
| } |
| int length() { |
| return curlen; |
| } |
| int getpos(const int value) { |
| for (int i = 0; i < maxsize; i++) { |
| if (value == alist[i]) { |
| return i; |
| } |
| } |
| return -1; |
| } |
| bool insert(const int p, const int value) { |
| if (curlen >= maxsize) { |
| cout << "The List is overflow" << endl; |
| return false; |
| } |
| if (p<0 || p>curlen) { |
| cout << "Insertion point is illegal" << endl; |
| return false; |
| } |
| for (int i = curlen; i > p; i--) { |
| alist[i] = alist[i - 1]; |
| } |
| alist[p] = value; |
| curlen++; |
| return true; |
| } |
| bool del(const int p) { |
| if (curlen == 0) { |
| cout << "No elements to delete" << endl; |
| return false; |
| } |
| if (p<0 || p>curlen - 1) { |
| cout << "deletion is illegal" << endl; |
| return false; |
| } |
| for (int i = p; i <= curlen - 1; i++) { |
| alist[i] = alist[i + 1]; |
| |
| } |
| curlen--; |
| return true; |
| } |
| void print() { |
| for (int i = 0; i < curlen; i++) { |
| cout << alist[i]; |
| } |
| cout << endl; |
| } |
| }; |
| int main() { |
| arrlist a(10); |
| a.insert(0, 1); |
| a.print(); |
| a.insert(1, 3); |
| a.insert(1, 2); |
| a.print(); |
| a.insert(3, 4); |
| cout<<a.length()<<endl; |
| a.del(3); |
| a.print(); |
| cout<<a.length()<<endl; |
| cout << a.getpos(1); |
| return 0; |
| } |
(四)运行结果:
(五)关于时间复杂度:
-
按位置读取:
-
插入、删除、按内容查找:
-
查找:
-
插入:
本文作者:Smera1d0
本文链接:https://www.cnblogs.com/Smera1d0/p/17698001.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步