顺序表基本操作C++实现
2017-12-06 16:42
549 查看
代码实现:
#include<iostream> using namespace std; const int MAXSIZE = 20; class SqList{ private: int *data; int length; public: SqList(); //构造函数 ~SqList(); // 析构函数 void CreatList(int a[], int n); //创建顺序表 void Display(); //输出顺序表中所有元素 int GetLength(); //获取顺序表的长度 bool GetElem(int, int &elem); // 获取顺序表中的某个元素 bool ListInsert(int i, int elem); // 插入元素 bool ListDelete(int i, int &elem); //删除元素 }; SqList::SqList(){ cout<<"constract ok"<<endl; data = new int[MAXSIZE]; length = 0; } SqList::~SqList(){ cout<<"No"<<endl; delete [] data; } void SqList::CreatList(int a[], int n){ for(int i = 0; i < n; i++){ data[i] = a[i]; } length = n; cout<<"create SqList success!"<<endl; } //获取顺序表的长度 int SqList::GetLength(){ return length; } //获取指定元素 bool SqList::GetElem(int i, int &e){ if(length == 0 || i < 1 || i > length){ return false; } e = data[i-1]; return true; } //插入元素 bool SqList::ListInsert(int i, int e){ if(length == MAXSIZE) //保证插入位置正确 return false; if(i < 1 || i > length+1) return false; if(i < length){ for(int k = length-1; k >= i-1; k--) //将插入位置之后的元素都向后移动一个位置 data[k+1] = data[k]; } data[i-1] = e; //将待插入的元素赋值给插入位置 length++; //将顺序表的长度增加一个 return true; } //删除元素 bool SqList::ListDelete(int i, int &e){ if(length == 0) //保证删除位置正确 return false; if(i < 1 || i > length) return false; e = data[i-1]; //将要删除的元素保存给 e if(i < length){ for(int k = i; k < length; k++){ //将删除位置后面的元素都向前移动一个位置 data[k-1] = data[k]; } } length--; //将顺序表的长度删除一个 return true; } void SqList::Display(){ cout<<"display SqList:"; for(int i = 0; i < length; i++){ cout<<data[i]<<"\t"; } cout<<endl; } int main(){ SqList *sqlist = new SqList(); int arr[5] = {3, 4, 5, 6, 7}; sqlist->CreatList(arr, 5); sqlist->Display(); cout<<"get element length is :"<<sqlist->GetLength()<<endl; int a; sqlist->GetElem(2, a); cout<<"get element is : "<<a<<endl; sqlist->ListInsert(2, 100); sqlist->Display(); int b; sqlist->ListDelete(2, b); cout<<"delete element is : "<<b<<endl; sqlist->Display(); delete sqlist; return 0; } //第二种创建类的方法 int main01(){ SqList sqlist; int arr[5] = {3, 4, 5, 6, 7}; sqlist.CreatList(arr, 5); sqlist.Display(); cout<<"get element length is :"<<sqlist.GetLength()<<endl; int a; sqlist.GetElem(2, a); cout<<"get element is : "<<a<<endl; sqlist.ListInsert(2, 100); sqlist.Display(); int b; sqlist.ListDelete(2, b); cout<<"delete element is : "<<b<<endl; sqlist.Display(); // delete sqlist; return 0; }
**
ps: c++ 创建类的三种方法:
**#include <iostream> using namespace std; class A { private: int n; public: A(int m):n(m) { } ~A(){} }; int main() { A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配 delete c; return 0; }
注意事项:
1、new创建类对象需要指针接收,一处初始化,多处使用
2、new创建类对象使用完需delete销毁
3、new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
4、new对象指针用途广泛,比如作为函数返回值、函数参数等
5、频繁调用场合并不适合new,就像new申请和释放内存一样
6、栈的大小远小于堆的大
7、栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率 比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在 堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会 分 到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多
关于三种创建对象方法文章链接地址
https://www.cnblogs.com/lizhenlin/p/6813455.html
相关文章推荐
- C++实现顺序结构线性表的基本操作
- C++实现顺序表的基本操作
- 顺序队列的基本操作实现c++
- 顺序表的基本操作——C++实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- C++实现shapefile文件的读写和基本功能的操作
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
- 【数据结构】顺序栈的基本操作操作---C/C++
- C++实现链表的基本操作及测试用例
- C++实现最小堆及插入,调整顺序,删除堆顶元素的操作
- 顺序栈的基本操作实现c++
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 【代码】C++实现二叉树基本操作及测试用例
- c++实现顺序表的操作
- c++学习笔记—单链表基本操作的实现
- C++实现二叉树的基本操作
- 数据结构顺序栈和链栈基本操作----c++实现
- 线性表之顺序表基本操作实现