顺序表

  • 1000ms
  •  32768K

通过前面几节,我们就学完了顺序表的查找、删除以及遍历操作啦。还是和之前一样,现在需要你独立的去实现一遍这些代码,我们会给出基本的框架,你只要在相应的方法内完善它们就好了。

相信你已经了解了我们的评判机制,我们会给出几组输入数据,通过你的程序相应的得到一些输出数据,只要你的输出数据和我们标准的输出一致就能通过这道难题了。如果遇到困难就重新温习前面的内容吧,一定不要直接利用之前的代码!

我们已经建立好了一个容量为 2020 的顺序表,你需要对其执行一系列的操作。

输入格式

第一行输入一个正整数 mm1 \leq m \leq 1001m100),代表一共有 mm 个操作。

接下来输入 mm 行,每行首先输入一个整数 tt,分别代表以下操作:

  • t = 1t=1,代表插入操作,输入两个整数 aa和 bb0 \leq a,b \leq 1000a,b100),表示在 aa 的位置上擦入元素 bb,如果插入成功输出success,否则输出failed
  • t = 2t=2,代表删除操作,输入一个整数 aa0 \leq a \leq 1000a100),删除位置 aa 上的元素,如果删除成功输出success,否则输出failed
  • t = 3t=3,代表查找操作,输入一个整数 aa0 \leq a \leq 1000a100),查找元素值为 aa 的元素,如果查找成功输出success,否则输出failed
  • t = 4t=4,代表遍历操作,输出当前顺序表的所有元素。

输出格式

对应每个操作,输出结果。对于前三个操作,如果操作成功输出success,否则输出failed;对于第四个操作,从下标为 00 的位置开始输出当前顺序表的所有元素,每两个整数之间一个空格,最后一个整数后面没有空格。

样例输入
9
1 0 1
1 5 2
1 1 2
1 2 3
3 2
2 2
2 9
3 3
4
样例输出
success
failed
success
success
success
success
failed
failed
1 2

#include <iostream>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
template <typename Type> class Vector {
private:
    int size,length;
    Type* data;
public:
    Vector(int input_size) {
        size = input_size;
        data = new Type[size];
        length = 0;
    }
    ~Vector() {
        delete[] data;
    }
    bool insert(int loc,Type val) {
        if(loc<0 || loc>length) {cout << "failed" << endl; return false;}
        if(length >= size) expand();
        for(int i=length;i>loc;i--){
            data[i] = data[i-1];
        }
        data[loc] = val;
        length++;
        cout << "success" << endl;
        return true;
    }
    void expand() {
        Type* old_data = data;
        size *=2;
        data = new Type[size];
        for(int i=0;i<length;i++){
            data[i] = old_data[i];
        }
        delete[] old_data;
    }
    bool search(const Type &val) {
        for(int i=0;i<length;i++){
            if(data[i] == val) {cout << "success" << endl; return true;}
        }
        cout << "failed" << endl;
        return false;
    }
    bool remove(int index) {
        if(index<0 || index>=length) {cout << "failed" << endl; return false;}
        for(int i=index+1;i<length;i++) {
            data[i-1] = data[i];
        } 
        length--;
        cout << "success" << endl;
        return true;
    }
    void print() {
        for(int i=0;i<length;i++){
            if(i) cout << " ";
            cout << data[i];
        }
        cout << endl;
    }
};
int main() {
    Vector<int> v(20);
    int n;
    cin >> n;
    while(n--) {
        // 请在此处完成代码
        int ord,a=0,b=0;
        cin >> ord;
        if(ord==1){
            cin >> a >> b;
            v.insert(a,b);
        }else if(ord==2){
            cin >> a;
            v.remove(a);
        }else if(ord==3){
            cin >> a;
            v.search(a);
        }else if(ord==4) v.print();
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>