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;
}