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
Solution:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
OrderList oList = new OrderList();
int index = 1;
int num = scanner.nextInt();
int[] a = new int[num];
for (int i = 0; i < num; i++) {
a[i] = scanner.nextInt();
}
oList.multiinsert(index,num, a);
oList.show();
//insert
index = scanner.nextInt();
num = scanner.nextInt();
a = new int[num];
for (int i = 0; i < num; i++) {
a[i] = scanner.nextInt();
}
if (oList.multiinsert(index,num,a)) {
oList.show();
}else {
oList.showError();
}
//delete
index = scanner.nextInt();
num = scanner.nextInt();
if (oList.multidel(index, num)) {
oList.show();
}else {
oList.showError();
}
}
}
class OrderList
{
private int size;
private int MAX =1000;
private int[] list;
public OrderList(){//初始化
list = new int[MAX];
size = 0;
}
public boolean multiinsert(int index,int num,int[] a) {
index--;
//判断是否合法
if (index>=0 && index <=size) {
for (int i = size+num; i >=index+num; --i) {
list[i] = list[i-num];
}
for (int i = index; i <index+num; i++) {
list[i] = a[i-index];
}
size += num;
return true;
}
return false;
}
public boolean multidel(int index, int num) {
index--;
//判断是否合法
if (index>=0 && index <size) {
for (int i = index; i <size; ++i) {
list[i] = list[i+num];
}
if (size-index >= num) {
size -= num;
}else {
size = index;
}
if (size == 0) {
return false;
}
return true;
}
return false;
}
public void show() {
System.out.print(size+" ");
for (int i = 0; i < size; i++) {
System.out.print(list[i]+" ");
}
System.out.println();
}
public void showError() {
System.out.println("error");
}
}