欢迎使用CSDN-markdown编辑器

线性表的顺序表示 (数组)

线性表ADT:

数据:
    数组:长度为n的数组以存储线性表数据
运算:
    Create():创建一个新的空线性表
    Destroy():撤销一个线性表
    IsEmpty():线性表是否为空
    IsFull():线性表是否已满
    Length():返回线性表长度
    Insert(i,x):在线性表中特定位置插入数据
    Delete(i):在线性表中特定位置删除一个数据
    Find(i,x):查找线性表特定位置的一个数据并在x中返回
    Search(x):在线性表中查找元素x并返回下标
    Output(out):将表送至输出流

//头文件
class SequentialList{
private:
    int maxSize = 0;
    int *elements;
    int n = 0;

public:
    SequentialList(int max);
    ~SequentialList();
    bool Insert(int i,int x);//在下标为i的地方插入元素x
    bool Delete(int i);//删除下表为i的元素
    bool Find(int i,int &x);//查找下标为i的元素,若存在返回true,否则返回false
    int Search(int x);//查找元素x,若找到则返回下标,否则返回-1
    void Output(outstream &out);//将表送至输出流
}

//cpp文件
SequentialList::SequentialList(int max){
    maxSize = max;
    elements = new int[max];
}
SequentialList::~SequentialList(){
    delete[] elements;
}
bool SequentialList::IsEmpty(){
    return n == 0;
}
bool SequentialList::IsFull(){
    return n == maxSize;
}
bool SequentialList::Insert(int i,int x){
    if(IsFull())return false;
    if(i < 0){
        cout<<"Underflow!"<<endl;
        return false;
    }
    if(i >= maxSize){
        cout<<"Overflow!"<<endl;
        return false;
    }
    for(int j = n;j > i;j--){
        elements[j] = elements[j-1];
    }
    elements[i] = x;
    n++;
    return true;
}
bool SequentialList::Delete(int i){
    if(IsEmpty())return false;
    if(i < 0){
        cout<<"Underflow!"<<endl;
        return false;
    }
    if(i >= maxSize){
        cout<<"Overflow!"<<endl;
        return false;
    }
    //question:what if i==0,and maxSize == 1 ?
    for(int j = i;j < n-1;j++){
        elements[j] = elements[j+1];
    }       
    n--;
    return true;
}
int SequentialList::Length(){
    return n;
}
int SequentialList::Search(int x){
    for(int i = 0;i < n;i++){
        if(elements[i]==x)return i;
    }
    return -1;
}
void SequentialList::Output(outstream &out){
    for(int i = 0;i < n;i++){
        out<<elements[i]<<" ";
    }
    out<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值