建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为 1000
)
该类具有以下成员函数:
构造函数:实现顺序表的初始化。
插入多个数据的
multiinsert(int i, int n, int item[])
函数,实现在第
i
个位置,
连续插入来自数组
item
的
n
个数据,即从位置
i
开始插入多个数据。
删除多个数据的
multidel(int i, int n)
函数,实现从第
i
个位置开始,连续删除
n
个数据,即从位置
i
开始删除多个数据。
编写
main
函数测试该顺序表类。
Input
第
1
行先输入
n
表示有
n
个数据,即
n
是实际长度;接着输入
n
个数据
第
2
行先输入
i
表示插入开始的位置,再输入
k
表示有
k
个插入数据,接着输入
k 个数据
第
3
行先输入
i
表示删除开始的位置,再输入
k
表示要删除
k
个数据
Output
顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开
第
1
行输出创建后的顺序表内容
第
2
行输出执行连续插入后的顺序表内容
第
3
行输出执行连续删除后的顺序表内容
Sample Input
6 11 22 33 44 55 662 3 99 88 774 5
Sample Output
6 11 22 33 44 55 66
9 11 99 88 77 22 33 44 55 664 11 99 88 66
AC代码:
#include<iostream>
#include <cstring>
using namespace std;
#define ok 0
#define error -1
// 顺序表类定义
class SeqList
{
private:
int* list; // 元素数组
int maxsize; // 顺序表最大长度
int size; // 顺序表实际长度
public:
SeqList(); // 构造函数
~SeqList(); // 析构函数
void set(int length) {
this->size = length;
for (int i = 0; i < length; i++) {
cin >> *(list + i);
}//初始化数组
list_display();
}
void multiinsert(int i, int n, int item[]) {
for (int j = size - 1; j >= i - 1; j--) {
*(list + n + j) = *(list + j);
}
for (int j = i - 1, k = 0; j < i + n - 1; j++, k++) {
*(list + j) = item[k];
}
size += n;
cout << size << " ";
list_display();
}
void multidel(int i, int n) {
for (int j = i + n - 1; j < size + n; j++) {
*(list + j - n ) = *(list + j);
}
size -= n;
cout << size << " ";
list_display();
}
void list_display() {
for (int i = 0; i < size; i++) {
cout << *(list + i)<<" ";
}
cout << endl;
}; // 输出整个顺序表
};
SeqList::SeqList()
{
maxsize = 1000;
size = 0;
list = new int[maxsize];
}
SeqList::~SeqList()
{
delete[]list;
}
int main() {
int n;
cin >> n;
SeqList p;
p.set(n);
int i;
int k;
cin >> i >> k;
int a[1000];
for (int j = 0; j < k; j++) {
cin >> a[j];
}
p.multiinsert(i, k,a);
cin >> i >> k;
p.multidel(i, k);
return 0;
}
添加数据有三种方法:
for (int j = size - 1; j >= i - 1; j--) {
*(list + n + j) = *(list + j);
}
for (int j = i - 1, k = 0; j < i + n - 1; j++, k++) {
*(list + j) = item[k];
}
int a[1000];
for (int j = 0; j < size; j++) {
a[j] = *(list + j);
}
for (int j = i - 1; j < i - 1 + n ; j++) {
*(list + j) = item[j - i + 1];
}
for (int j = i + n - 1; j < size + n; j++) {
*(list + j) = *(a + j - n );
}
for(int k=n-1;k>=0;k--){
for(int j = size; j >i-1 ;j--){
list[j]=list[j-1];
}
list[i-1]=item[k];
size++;
}