首页 > 代码库 > 闭关修炼中 *** Java常用算法之 -- 顺序表结构

闭关修炼中 *** Java常用算法之 -- 顺序表结构

        

      给我的好姐姐聊聊天代码也打完了,小弟可是一心二用了,不过代码确实是挺长的。

      代码打的时间长短不重要,重要的是理解~理解~理解。重要的事说三遍!!!

 

      每天的重复,恨不得一天过成两天马上结束了,能多学点是点了。

 

      山再高,咱能有耐心。同样如此~哈哈。

 

  贴上代码吧:

  1 import java.util.Scanner;
  2 
  3 /*****************************************
  4  *                                       *     
  5  *                 顺序结构               *
  6  *                                       *
  7  *****************************************/
  8 
  9     //代码开始
 10 
 11 /***********************结点的关键字********************************/
 12 class DATA{
 13     String key;
 14     String name;
 15     int age;
 16 }
 17 
 18 /**********************定义顺序表结构********************************/
 19 class SLType{
 20     static final int MAXLEN = 100;    //定义一个最大值
 21     DATA[] ListData = http://www.mamicode.com/new DATA[MAXLEN + 1];        //保存顺序表的结构数组
 22     int ListLen;                    //顺序表已存结点的数量
 23     
 24     //初始化顺序表
 25     void SLInit(SLType SL){
 26         SL.ListLen = 0;                //初始化为空表
 27     }
 28     
 29     int SLLength(SLType SL){
 30         return (SL.ListLen);        //返回顺序表的元素数量
 31     }
 32     
 33     int SLInsert(SLType SL,int n,DATA data){
 34         int i;
 35         if(SL.ListLen >= MAXLEN){                //判断顺序表数量是否已超过最大数量
 36             System.out.println("顺序表已满,不能插入结点\n");
 37             return 0;                //返回0表示不成功
 38         }
 39         if(n < 1 || n >SL.ListLen-1){            //插入结点序号不正确
 40             System.out.println("插入元素序号错误,不能插入元素!\n");
 41             return 0;
 42         }
 43         for (i = SL.ListLen; i >= n ; i--) {    //将顺序表中的数据向后移动
 44             SL.ListData[i+1] = SL.ListData[i];
 45         }
 46         SL.ListData[n] = data;        //插入结点
 47         SL.ListLen++;                //顺序表结点数量增加1
 48         return 1;                    //成功插入,返回1
 49     }
 50     
 51     int SLAdd(SLType SL,DATA data){                //增加元素到顺序表尾部
 52         if(SL.ListLen >= MAXLEN){    //顺序表已满
 53             System.out.println("顺序表已满,不能再添加结点了!\n");
 54             return 0;
 55         }
 56         SL.ListData[++SL.ListLen] = data;
 57         return 1;
 58     }
 59     
 60     int SLDelete(SLType SL,int n){                //删除顺序表中数据元素
 61         int i;
 62         if(n < 1 || n > SL.ListLen + 1){        //删除结点序号不正确
 63             System.out.println("删除结点序号错误,不能删除结点!\n");
 64             return 0;                //删除不成功,返回0
 65         }
 66         for(i=n; i < SL.ListLen; i++){            //将顺序表中的数据向前移动
 67             SL.ListData[i] = SL.ListData[i + 1];
 68         }
 69         SL.ListLen--;                //顺序表元素数量减1
 70         return 1;                    //成功删除,返回1
 71     }
 72     
 73     DATA SLFindByNum(SLType SL,int n){            //根据序号返回数据元素
 74         if(n < 1 || n > SL.ListLen + 1){        //元素序号不正确
 75             System.out.println("结点序号错误,不能返回结点!\n");
 76             return null;            //不成功,返回0
 77         }
 78         return SL.ListData[n];
 79     }
 80     
 81     int SLFindByCont(SLType SL,String key){        //按关键字查询结点
 82         int i;
 83         for(i=1 ;i<= SL.ListLen; i++){
 84             if(SL.ListData[i].key.compareTo(key)==0){//如果找到所需结点
 85                 return i;            //返回结点序号
 86             }
 87         }
 88         return 0;                    //搜索整个表后仍没有找到,则返回0
 89     }
 90     
 91     int SLAll(SLType SL){                        //显示顺序表中的所以结点
 92         int i;
 93         for(i = 1; i<=SL.ListLen; i++){
 94             System.out.printf("(%s,%s,%d)\n",SL.ListData[i].key,SL.ListData[i].name,SL.ListData[i].age);
 95         }
 96         return 0;
 97     }
 98 }
 99 /**********************main方法的实现******************************/
100 public class P2_1 {
101     public static void main(String[] args) {
102         int i;
103         SLType SL = new SLType();    //定义顺序表变量
104         DATA pdata;                    //定义结点保存引用变量
105         String key;                    //保存关键字
106         
107         System.out.println("顺序表操作演示!\n");
108         
109         SL.SLInit(SL);                //初始化顺序表
110         System.out.println("初始化顺序表完成!\n");
111         
112         Scanner input = new Scanner(System.in);
113         
114         do{                                    //循环添加结点数据
115             System.out.print("输入添加的结点(学号 姓名 年龄): ");
116             DATA data = http://www.mamicode.com/new DATA();
117             data.key = input.next();
118             data.name = input.next();
119             data.age = input.nextInt();
120             
121             if(data.age!=0){                //若年龄不为0
122                 if(SL.SLAdd(SL, data)==0){    //若添加结点失败
123                     break;                    //退出死循环
124                 }
125             }
126             else{                            //若年龄为0
127                 break;                        //退出死循环
128             }
129         }while(true);
130         System.out.print("\n顺序表中的结点的序号为:\n");
131         SL.SLAll(SL);                        //显示所有结点数据
132         
133         System.out.print("\n要取出结点的序号:");
134         i=input.nextInt();                                    //输入结占点序号
135         pdata = http://www.mamicode.com/SL.SLFindByNum(SL, i);                        //按序号查找结点
136         if(pdata != null){                                    //若返回的结点引用不为null
137             System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);
138         }
139         
140         System.out.print("\n要查找结点的关键字\n");
141         key = input.next();                                    //输入关键字
142         i = SL.SLFindByCont(SL, key);                        //按关键字查找,返回结点序号
143         pdata = http://www.mamicode.com/SL.SLFindByNum(SL, i);                        //按序号查询,返回结点引用
144         if(pdata != null){                                    //若结点引用不为null
145             System.out.printf("第%d个结点为:(%s,%s,%d)\n",i,pdata.key,pdata.name,pdata.age);
146         }
147     }
148 }

 

 

 

      慢慢更新吧,越学懂的越少,不懂的时候能装一手的好b,越是了解越感觉自己太tm的过于小菜了吧。

      

闭关修炼中 *** Java常用算法之 -- 顺序表结构