您的位置:首页 > 编程语言 > C语言/C++

顺序表基本操作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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息