import java.util.Scanner;
class DATA{//创建一个数据类型,用来作为有序表的每一个单元
String key;
String name;
int age;
}
class SLType{//创建一个有序表类,他包含一个data类型的数组,和一个固定长度
static final int MAXLEN=100;
DATA[] ListData=new DATA[MAXLEN+1];
int ListLen;
void SLInit(SLType SL){//有序表初始化,就是将他的长度置为0
SL.ListLen=0;
}
int SLLength(SLType SL){//获取有序表长度的方法,就是返回有序表长度。。。。。感觉这个没必要封装这个方法的
return SL.ListLen;
}
int SLInsert(SLType SL,int n,DATA data){//插入方法,传入待插入的有序表,和data类型的数据,再把长度加1就可以了
if(SL.ListLen>=MAXLEN){//插入之前总是要看有序表有没有满
System.out.print("顺序表已满,不能插入节点n");
return 0;
}
if(n<1||n>MAXLEN){//检查输入节点是否合理
System.out.println("插入n值有误");
return 0;
}
for(int i=SL.ListLen;i>=n;i--){//从最后一个起,依次向后移动数据,一直移动到要插入的位置
SL.ListData[i+1]=SL.ListData[i];
}
SL.ListData[n]=data;//把data类型的data传进sl的数组中
SL.ListLen++;//有序表的长度属性加1
return 1;
}
int SLAdd(SLType SL,DATA data){//在有序表最后面增加一个
if(SL.ListLen>=MAXLEN){
System.out.println("顺序表已经满了");
return 0;
}
SL.ListData[++SL.ListLen]=data;//先++,所有下标从1起
return 1;
}
int SLDelete(SLType SL,int n){//删除一个有序表元素
if(n<1||n>SL.ListLen){
System.out.println("n不符合要求");
return 0;
}
for(int i=n;i<SL.ListLen;i++){//从第n个开始,后一个的值依次覆盖前一个
SL.ListData[n]=SL.ListData[n+1];
}
SL.ListLen--;//长度减一
return 1;
}
DATA SLFindbynum(SLType SL,int n){//根据索引找有序表
if(n<1||n>SL.ListLen+1){//检查n是否符合规范
System.out.println("n不符合规定");
return null;
}
return SL.ListData[n];
}
int SLFindbycont(SLType SL,String key){//根据key的值来索引
for(int i=1;i<=SL.ListLen;i++){
if(SL.ListData[i].key.compareTo(key)==0){
return i;//如果匹配的话返回下标,返回第一个符合条件的
}
}
return 0;
}
int SLAll(SLType SL){//打印所有的有序表元素
// int i;
for(int i=1;i<=SL.ListLen;i++){
System.out.printf("(%s,%s,%d)\n",SL.ListData[i].key,SL.ListData[i].name,SL.ListData[i].age);//格式化打印
}
return 0;
}
}
public class list {
public static void main(String[] args) {
// TODO code application logic here
SLType SL =new SLType();
int i;
SL.SLInit(SL);
Scanner in=new Scanner(System.in);
do{//设计一个死循环,只有在符合某一条件下,才跳出循环
DATA data=new DATA();//定义一个data用来存放输入的每一组数据
System.out.println("输入 key name age: ");
data.key=in.next();
data.name=in.next();
data.age=in.nextInt();
if(data.age!=0){
SL.SLAdd(SL,data);//如果age不为0(一个规定) 就继续把data插入有序表
}else{
break;//如果发现输入的age为0,就停止
}
}while (true);
SL.SLAll(SL);//显示所有有序表数据
System.out.println("要取出的顺序是:");
i=in.nextInt();
DATA pada=SL.SLFindbynum(SL, i);//获取根据索引得到的data
if(pada!=null){
System.out.printf("(%s,%s,%d)\n",pada.key,pada.name,pada.age);
}
System.out.println("要取出的关键字是:");
String key=in.next();
i=SL.SLFindbycont(SL, key);//获取根据关键字值获取的索引
DATA hada=SL.SLFindbynum(SL, i);//获取根据索引得到的data
if(hada!=null){
System.out.printf("(%s,%s,%d)\n",hada.key,hada.name,hada.age);
}
}
}