顺序表基本操作C++实现
原创
©著作权归作者所有:来自51CTO博客作者Lucky麒麟的原创作品,请联系作者获取转载授权,否则将追究法律责任
代码实现:
#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++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在 堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会 分 到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多