标签:
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); } } }
标签:
原文地址:http://www.cnblogs.com/tobemaster/p/5453668.html