• 基础数据结构-线性表-顺序表的连续操作


    建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)

    该类具有以下成员函数:

    构造函数:实现顺序表的初始化。

    插入多个数据的multiinsert(int i, int n, int item[])函数,实现在第i个位置,连续插入来自数组item的n个数据,即从位置i开始插入多个数据。

    删除多个数据的multidel(int i, int n)函数,实现从第i个位置开始,连续删除n个数据,即从位置i开始删除多个数据。

    编写main函数测试该顺序表类。

    输入
    第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据

    第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k个数据

    第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据

    输出
    顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开

    第1行输出创建后的顺序表内容

    第2行输出执行连续插入后的顺序表内容

    第3行输出执行连续删除后的顺序表内容

    样例输入
    6 11 22 33 44 55 66
    2 3 99 88 77
    4 5
    样例输出
    6 11 22 33 44 55 66
    9 11 99 88 77 22 33 44 55 66
    4 11 99 88 66

    #include<iostream>
    using namespace std;
    
    #define ok 0
    #define error -1
    
    class SeqList{
    private:
        int *list;
        int maxsize;
        int size;
    public:
        SeqList();
        ~SeqList();
        int list_size();
        int list_insert(int i,int item);
        int list_del(int i);
        int list_get(int i);
        void list_display();
        int multiinsert(int i, int n, int item[]);
        int multidel(int i, int n);
    };
    SeqList::SeqList(){
        maxsize  = 1000;
        size = 0;
        list = new int[maxsize];
    }
    SeqList::~SeqList(){
        delete []list;
    }
    int SeqList::list_size(){
        return size;
    }
    void SeqList::list_display(){
        int i;
        cout << size << ' ';
        for(i=0;i<size-1;i++)
            cout << list[i] << ' ';
        cout << list[size-1] << ' ' << endl;
    }
    int SeqList::list_insert(int i,int item){
        if(i<1||i>size+1)
            return error;
        else{
            int n;
            for(n=size;n>=i;n--)
                list[n] = list[n-1];
            list[i-1] = item;
            size++;
            return ok;
        }
    }
    int SeqList::list_get(int i){
        if (i<1||i>size)
            return error;
        else{
            cout << list[i-1] << endl;
            return ok;
        }
    }
    int SeqList::list_del(int i){
        if (i<1||i>size)
            return error;
        else{
            int n;
            for(n=i-1;n<size-1;n++)
                list[n] = list[n+1];
            list[size-1] = 0;
            size--;
            return ok;
        }
    }
    int SeqList::multiinsert(int i, int n, int item[]){
        int k,itemNB;
        for(k=0;k<n;k++){
            itemNB = item[k];
            list_insert(i+k,itemNB);
        }
        return ok;
    }
    int SeqList::multidel(int i, int n){
        int j;
        for(j=0;j<n;j++){
            list_del(i);
        }
        return ok;
    }
    int main(){
        int i,j,n,size,item[1000],itemNB;  //定义一个和类限制等大的数组用于后续放置,j为角标
        SeqList LIST;
        cin >> size;
        for(i=1;i<=size;i++){
            cin >> itemNB;
            LIST.list_insert(i,itemNB);
        }
        LIST.list_display();
        cin >> j >> n;
        for(i=0;i<n;i++){
            cin >> itemNB;
            item[i] = itemNB;
        }
        LIST.multiinsert(j,n,item);
        LIST.list_display();
        cin >> j >> n;
        LIST.multidel(j,n);
        LIST.list_display();
        return 0;
    }

     因为最近笔记本B面裂了准备去修,复杂些的会优先加上注释,所以在家先把代码和题目贴上来以后补文字,有疑问可以在下面留言。

  • 相关阅读:
    Linux 4.11 内核变化
    c++设计模式
    【MySQL】undo,redo,2PC,恢复思维导图
    10053
    深入理解MySQL中的Redo、Undo、MVCC
    oracle 博客精选
    Linux内存中的Cache真的能被回收么?
    MySQL性能指标及计算方法 等待show processlist
    HTTP抓包工具Fiddler
    科来网络分析
  • 原文地址:https://www.cnblogs.com/nathaneko/p/6491136.html
Copyright © 2020-2023  润新知