顺序表的简单实现

  1 import java.util.Scanner;
  2     class DATA{ //模拟一个班级的学生记录
  3         String key;
  4         String name;
  5         int age;
  6     }
  7  
  8     class SLType{
  9  
 10         static final int MAXLEN = 100;
 11         DATA[] ListData = new DATA[MAXLEN+1];  
 12         int ListLen;            //顺序表已存结点的数量
 13      
 14      
 15     void SLInit(SLType sl){
 16         sl.ListLen = 0;
 17     }
 18      
 19      
 20     int SLLength(SLType sl){
 21         return (sl.ListLen);
 22     }
 23      
 24     //插入节点
 25     int SLInsert(SLType SL,int n , DATA data){
 26         int i ;
 27         if(SL.ListLen>=MAXLEN){
 28             System.out.println("顺序表已满,不能插入节点");
 29             return 0;
 30         }
 31          
 32         if(n<1 || n>SL.ListLen-1){
 33             System.out.println("插入序号有误,不能插入节点");
 34             return 0;
 35         }
 36         //将顺序表中的数据向后移动
 37         for(i = SL.ListLen; i >=n ; i--){
 38             SL.ListData[i+1] = SL.ListData[i];
 39         }
 40         SL.ListData[n] = data;
 41         SL.ListLen++;
 42         return 1;
 43          
 44     }
 45      
 46      
 47     //追加节点
 48     int SLAdd(SLType SL,DATA data){
 49         if(SL.ListLen>=MAXLEN){
 50             System.out.println("顺序表已满,不能插入节点");
 51             return 0;
 52         }
 53         SL.ListData[++SL.ListLen]=data;
 54         return 1;
 55     }
 56      
 57     //删除节点
 58     int SLDelete(SLType SL,int n ){
 59         int i;
 60         if(n<1||n>SL.ListLen+1){
 61             System.out.println("序号输入有误,不能插入节点");
 62             return 0;
 63         }
 64         //往前挪
 65         for(i = n ; i<SL.ListLen;i++){
 66             SL.ListData[i] = SL.ListData[i+1];
 67         }
 68         SL.ListLen--;
 69         return 1;
 70     }
 71      
 72     //查找节点
 73     DATA SLFindByNum(SLType SL,int n){
 74         if(n<1||n>SL.ListLen+1){
 75             System.out.println("序号输入有误,不能插入节点");
 76             return null;
 77         }
 78         return SL.ListData[n];
 79     }
 80      
 81     //按照关键字查找节点
 82     int SLFindByCont(SLType SL,String key){
 83         int i;
 84         for(i = 1; i <= SL.ListLen ; i++){
 85             if(SL.ListData[i].key.compareTo(key)==0){
 86                 return i;
 87             }
 88         }
 89         return 0;
 90     }
 91      
 92     //显示所有节点
 93     int SLAll(SLType SL){
 94         int i;
 95         for(i = 1; i <=SL.ListLen ; i++){
 96             System.out.println(SL.ListData[i].key+"#"+SL.ListData[i].name+"#"+SL.ListData[i].age);
 97         }
 98         return 0;
 99     }
100      
101     }
102  
103     public class SequentialList {
104         public static void main(String[] args) {
105             int i;
106             SLType SL=new SLType();                 //定义顺序表变量
107 //          DATA data=new DATA();                   //定义结点保存数据类型变量
108             DATA pdata;             //定义结点保存指针变量
109             String key;                 //保存关键字
110              
111             System.out.print("顺序表操作演示!\n");
112              
113             SL.SLInit(SL);                  //初始化顺序表
114             System.out.print("初始化顺序表完成!\n");
115              
116             Scanner input=new Scanner(System.in);
117  
118             do
119             {                           //循环添加结点数据
120                 System.out.print("输入添加的结点(学号 姓名 年龄):");
121                 DATA data=new DATA(); 
122                 data.key=input.next();
123                 data.name=input.next();
124                 data.age=input.nextInt();
125                  
126                 if(data.age!=0)               //若年龄不为0
127                 {
128                     if(SL.SLAdd(SL,data)==0)   //若添加结点失败
129                     {
130                         break;            //退出死循环
131                     }
132                 }
133                else                 //若年龄为0
134                {
135                     break;                  //退出死循环
136                }
137             }while(true);
138             System.out.print("\n顺序表中的结点顺序为:\n");
139             SL.SLAll(SL);                  //显示所有结点数据
140              
141              
142             System.out.print("\n要取出结点的序号:");
143             i=input.nextInt();               //输入结占点序号   
144             pdata=SL.SLFindByNum(SL,i);  //按序号查找结点
145             if(pdata!=null)                 //若返回的结点指针不为NULL
146             {
147                 System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);
148             }
149             System.out.print("\n要查找结点的关键字:");
150             key=input.next();           //输入关键字    
151             i=SL.SLFindByCont(SL,key);     //按关键字查找 ,返回结点序号
152             pdata=SL.SLFindByNum(SL,i);   //按序号查询,返回结点指针
153             if(pdata!=null)                     //若结点指针不为NULL
154             {
155                 System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age); 
156             }
157         }
158 }

 

posted @ 2016-06-11 14:05  清风雨下  阅读(228)  评论(0编辑  收藏  举报