顺序表基本操作C++实现

代码实现:

#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++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值