DS顺序表--连续操作

本文介绍了如何使用C++实现顺序表的数据结构,包括初始化函数、多元素插入函数和多元素删除函数,通过输入样例展示了功能在实际中的应用。
摘要由CSDN通过智能技术生成

DS顺序表–连续操作

题目描述

建立顺序表的存储结构,属性包括:数组、实际长度、最大长度(设定为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;

struct Line {
    int arr[1000] = {0}, max_len = 1000, len = 0;
};

void Display(Line &l) {
    cout << l.len << ' ';
    for (int i = 0; i < l.len; ++i) {
        cout << l.arr[i] << ' ';
    }
    cout << endl;
}

void Start(Line &l) {
    int len;
    cin >> len;
    int *arr = new int[len];
    l.len = min(len, l.max_len);
    for (int i = 0; i < len; ++i) {
        cin >> arr[i];
        if (i < l.max_len)
            l.arr[i] = arr[i];
    }
    Display(l);
}

void Insert(Line &l, int add, int x) {
        for (int i = l.len - 1; i >= add - 1; --i) {
            l.arr[i + 1] = l.arr[i];
        }
        l.arr[add - 1] = x;
        l.len++;
}

void Delete(Line &l, int add) {
        for (int i = add - 1; i < l.len; ++i) {
            l.arr[i] = l.arr[i + 1];
        }
        l.len--;
}

void Multiinsert(int i, int n, int item[], Line &l) {
    for (int j = 0; j < n; ++i, ++j) {
        Insert(l, i, item[j]);
    }
    Display(l);
}

void Multidel(int i, int n, Line &l) {
    for (int j = 0; j < n; ++j) {
        Delete(l, i);
    }
    Display(l);
}

int main() {
    Line arr;
    Start(arr);
    int i, n;
    cin >> i >> n;
    int *item = new int[n];
    for (int j = 0; j < n; ++j) {
        cin >> item[j];
    }
    Multiinsert(i, n, item, arr);
    cin >> i >> n;
    Multidel(i, n, arr);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鷸鰥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值