关于数据结构顺序表的相关操作。

#include <iostream>
using namespace std;

class SeqList {
    public:
        int *array;
        int size;
        int capacity;

        SeqList(int size);
        ~SeqList();

        void toInsert(int index, int element);
        void toDelete(int index);
        void replace(int index, int element);
        int getSize();
        int get(int index);
        void display();
};

SeqList::SeqList(int size) {
    capacity = 1000;
    this->size = size;
    array = new int[capacity];

    for (int i = 0; i < size; ++i) {
        cin>>array[i];
    }
}

SeqList::~SeqList() {
    delete []array;
}

void SeqList::toInsert(int index, int element) {
    --index;

    if (index > size || index < 0) {
        cout<<"Insert Error."<<endl;
        return;
    }

    if (size + 1 > capacity) {
        cout<<"Out of capacity."<<endl;
        return;
    }
    

    for (int i = size - 1; i >= index; --i) {
        cout<<array[i]<<" ";
        array[i + 1] = array[i];
    }
    array[index] = element;
    
    ++size;
}

void SeqList::toDelete(int index) {
    --index;

    if (index >= size || index < 0) {
        cout<<"Delete Error."<<endl;
        return;
    }

    for (int i = index; i < size; ++i) {
        array[i + 1] = array[i];
    }

    --size;
}

void SeqList::replace(int index, int element) {
    --index;
    
    if (index >= size || index < 0) {
        cout<<"Replace Error."<<endl;
        return;
    }
    
    array[index] = element;
}

int SeqList::get(int index) {
    --index;

    if (index >= capacity || index < 0) {
        cout<<"Obtain Error."<<endl;
        return -1;
    }

    return array[index];
}

void SeqList::display() {
    for (int i = 0; i < size; ++i) {
        if (i < size - 1) {
            cout<<array[i]<<" ";
        } else {
            cout<<array[i]<<endl;
        }
    }
}

int SeqList::getSize() {
    return size;
}

int main() {
    int size;
    cin>>size;

    SeqList list(size);

    int orders;
    cin>>orders;
    while (orders--) {
        string command;
        cin>>command;

        if (command == "Insert") {
            int index, element;
            cin>>index>>element;
            list.toInsert(index, element);
        }

        else if (command == "Delete") {
            int index;
            cin>>index;
            list.toDelete(index);
        }

        else if (command == "Get") {
            int index;
            cin>>index;
            if (list.get(index) == -1) {
                cout<<"Out of bound"<<endl;
            } else {
                cout<<list.get(index)<<endl;
            }
        }

        else if (command == "Size") {
            cout<<list.getSize()<<endl;
        }
        
        else if (command == "Replace") {
            int index, element;
            cin>>index>>element;
            list.replace(index, element);
        }
        
        else {
            list.display();
        }
    }
    
    return 0;
}

说明:

1、由于本程序操作的数组对象是动态内存分配的,所以capacity不宜设置过大。

2、增删改查之前都要检查索引位置是否合法,注意插入与删除对于索引位置的合法性检测有细微的差别,插入是允许索引位置比实际size大1的,而删除不可以。

3、此代码写的时候很严格的考虑了各种情况,但是测试的时候没有经过严格的检查,如果存在Bug(get函数查找失败的返回值为-1,如果顺序表当前索引位置为-1的话,就会出现Bug,本人也不知道如何解决元素与返回值冲突的问题,希望有大佬不吝赐教),欢迎各位大佬指正,另外如果代码风格不好的话,也请各位大佬指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值