import java.util.Scanner;
class DATA{//数据类
String key; // 节点的关键字
String name;
String age;
}
class SLType{// 定义顺序表的结构数组
static final int MAXLEN = 100;// 顺序表的最大长度
DATA[] ListData = new DATA[MAXLEN+1];// 保存顺序表的顺序结构
int ListLen; // 顺序表已存节点的的数量
public void SLinit(SLType SL) {// 初始化顺序表
SL.ListLen = 0; // 初始化为空表
}
public int SLLength(SLType SL) {// 返回顺序表中元素的数量
return SL.ListLen;
}
public int SLInsert(SLType SL,int n,DATA data) { // 向顺序表中插入元素
int i;
if(SL.ListLen >= MAXLEN) { // 顺序表中的数量已经超过了最大数量
System.out.println("顺序表已满,不能插入节点\n");
return 0; // 返回0 代表不能插入成功
}
if(n<1 || n >SL.ListLen-1) { // 插入节点的序号不正确
System.out.println("插入元素序号错误,不能插入元素!\n");
return 0;
}
for(i=SL.ListLen;i>=n;i--) { // 将顺序表中数据向后移动
SL.ListData[i+1] = SL.ListData[i];
}
SL.ListData[n] = data; // 插入节点
SL.ListLen ++; // 顺序表节点数量+1
return 1; // 成功 返回1
}
public int SLADD(SLType SL,DATA data) { // 增加元素到数组底部
if(SL.ListLen >= MAXLEN) { // 顺序表中的数量已经超过了最大数量
System.out.println("顺序表已满,不能插入节点\n");
return 0; // 返回0 代表不能插入成功
}
SL.ListData[++SL.ListLen] = data; // 数组元素添加,并且数组长度+1
return 1;
}
public int SLDelete(SLType SL,int n) { // 删除指定位置的元素
int i;
if(n<1 || n >SL.ListLen-1) { // 插入节点的序号不正确
System.out.println("插入元素序号错误,不能插入元素!\n");
return 0;
}
for(i=n;i<SL.ListLen;i++) {
SL.ListData[i] = SL.ListData[i+1]; // 所有元素向前移动
}
SL.ListLen--;// 顺序表的数量-1
return 1;
}
public DATA SLFindByNum(SLType SL,int n) { // 找到指定位置的元素通过序号
if(n<1 || n >SL.ListLen-1) { // 插入节点的序号不正确
System.out.println("插入元素序号错误,不能插入元素!\n");
return null;
}
return SL.ListData[n];
}
public int SLFindCount(SLType SL,String key) { // 按照关键字查找节点
int i;
for(i=1;i<SL.ListLen;i++) {
if(SL.ListData[i].key.compareTo(key) == 0) { // 查找key是否相同
return i;
}
}
return 0; // 查找整个顺序表的数据都没有,返回0
}
public int SLAll(SLType SL) { // 显示顺序表中的所有节点
int i;
for(i=1;i<=SL.ListLen;i++) {
System.out.println("这个元素的key是"+SL.ListData[i].key+"这个元素的name是"+SL.ListData[i].name+"这个元素的age是"+SL.ListData[i].age);
}
return 0;
}
}
public class ShunXuBiao {
public static void main(String[] args) {
test();
}
public static void test() {
int i;
SLType SL = new SLType(); // 定义顺序表变量
DATA pdata; // 定义保存节点的引用变量
String key ; // 定义保存关键字
System.out.println("顺序表演示操作!\n");
SL.SLinit(SL);;// 初始化顺序表
System.out.println("初始化顺序表完成\n");
Scanner input = new Scanner(System.in);
do {
System.out.println("输入添加节点的(学号 姓名 年龄)");
DATA data= new DATA();
data.key = input.next();
data.name = input.next();
data.age = input.next();
if(!"0".equals(data.age)) {
// 如果年龄不为零
if(SL.SLADD(SL, data) == 0) { // 如果元素添加失败
break;
}
}else {
break;
}
}while(true);
System.out.println("\n顺序表的节点顺序为: \n");
SL.SLAll(SL); // 显示所有节点
System.out.println("\n 请输入要选择的节点序号 \n");
i = input.nextInt(); //输入查找的序号
pdata = SL.SLFindByNum(SL, i); // 查找
if(pdata != null) {
System.out.println("找到了该节点");
}
System.out.println("/n 请输入要查找的关键字 \n");
key = input.next();
i = SL.SLFindCount(SL, key); // 该关键字的序号
pdata = SL.SLFindByNum(SL, i); // 查找
if(pdata != null) {
System.out.println("找到了该节点");
}
}
}
运行结果:
顺序表演示操作!
初始化顺序表完成
输入添加节点的(学号 姓名 年龄)
11 11 11
输入添加节点的(学号 姓名 年龄)
22 22 22
输入添加节点的(学号 姓名 年龄)
33 33 33
输入添加节点的(学号 姓名 年龄)
0 0 0
顺序表的节点顺序为:
这个元素的key是11这个元素的name是11这个元素的age是11
这个元素的key是22这个元素的name是22这个元素的age是22
这个元素的key是33这个元素的name是33这个元素的age是33
请输入要选择的节点序号
1
找到了该节点
/n 请输入要查找的关键字
11
找到了该节点