动态顺序表的简单实现
来源:互联网 发布:java开发平台结构图 编辑:程序博客网 时间:2024/06/06 04:22
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的。只要知道了第一个元素的存储地址,就可以知道线性表中任何一个元素的存储地址
#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;}
结果如下
0 0
- 简单的动态顺序表实现
- c::动态顺序表的简单实现
- 动态顺序表的简单实现
- 简单实现动态顺序表
- 动态实现简单【顺序表】
- C语言:动态顺序表的简单实现
- 动态顺序表部分接口的简单实现
- 简单的动态顺序表实现 不足之处请留言指出
- 动态顺序栈的简单实现
- C简单实现动态顺序表
- 简单实现静态/动态顺序表
- C语言简单实现动态顺序表
- 顺序表的动态实现
- 动态顺序表的实现
- 动态顺序表的实现
- 动态顺序表的实现
- 动态顺序表的实现
- 动态顺序表的实现
- SpringMVC返回json数据的三种方式
- Unityh 的主要类图
- Just WHAT IS THE UNIVERSAL SERIAL BUS?
- 图片3
- List集合的遍历以及增删改
- 动态顺序表的简单实现
- OpenGL常用模块(未完)
- iOS开发之获取当前最顶层的ViewController
- JS this指示器
- 数据库相关设计优化
- Solr-项目中的使用
- Java字符串format-用户号补齐格式化应用
- TCP UDP协议网络通讯
- 如何打jar包和运行jar包