终于把手头的算法实验报告怼完了,可以安心复习数据结构了,接下来根据分类,希望能一天A个七八题吧。(所有题目基本之前都用C++ A过,现在打算用java机考,只好复习一遍,巩固一下。)
DS顺序表--类实现
本题关键,这题是非常非常基础的东西了,其实顺序表我们可以直接调用一些封装好的类,比如ArrayList等,但是这里再写一遍的时候还是发现一些小问题,一个是容易忽略题目中的细节,这里的逻辑位置与实际位置相差了1,稍不注意就会WA一发。
题目描述
实现顺序表的用C++语言和类实现顺序表
属性包括:数组、实际长度、最大长度(设定为1000)
操作包括:创建、插入、删除、查找
输入
第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置
输出
数据之间用空格隔开
第1行输出创建后的顺序表内容,包括顺序表实际长度和数据
每成功执行一次操作(插入或删除),输出执行后的顺序表内容
每成功执行一次查找,输出查找到的数据
如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内容
样例输入
6 11 22 33 44 55 66
3 777
1 888
1
9
0
5
样例输出
6 11 22 33 44 55 66
7 11 22 777 33 44 55 66
8 888 11 22 777 33 44 55 66
7 11 22 777 33 44 55 66
error
error
44
提示
第i个位置是逻辑意义的位置,从1开始,在实际编程用数组,从0开始,对应数组i-1位置
Solution:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
OrderList oList = new OrderList();
for (int i = 1; i <=size; i++) {
oList.insert(i, scanner.nextInt());
}
oList.show();
//insert
for (int i = 0; i < 2; i++) {
if (oList.insert(scanner.nextInt(),scanner.nextInt())) {
oList.show();
}else {
oList.showError();
}
}
//delete
for (int i = 0; i < 2; i++) {
if (oList.delete(scanner.nextInt())) {
oList.show();
}else {
oList.showError();
}
}
//find
for (int i = 0; i < 2; i++) {
int result = oList.find(scanner.nextInt());
if (result>-1) {
System.out.println(result);
}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 insert(int index,int value) {
index--;
//判断是否合法
if (index>=0 && index<=size) {
for (int i = size; i >index; --i) {
list[i] = list[i-1];
}
list[index] = value;
size++;
return true;
}
return false;
}
public boolean delete(int index) {
index--;
//判断是否合法
if (index>=0 && index<size) {
for (int i = index ; i<size; i++) {
list[i] = list[i+1];
}
size--;
return true;
}
return false;
}
public int find(int index) {
index--;
// 查找从1开始
if (index>=0 && index<size) {
return list[index];
}
return -1;
}
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");
}
}