闭关修炼中 *** 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 = 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 = 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 = 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 = 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的过于小菜了吧。

      

时间: 2024-10-05 11:49:24

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

闭关修炼中 *** Java常用算法之 -- 栈结构

什么是栈结构: 栈结构从数据的运算来分类,栈结构具有特殊的运算规则. 从数据的逻辑结构来看,栈结构其实就是一种线性结构. but!!! 从数据的存储结构来划分,栈结构分为两类: 顺序表结构:即用一组地址连续的内存单元依次保存栈中的数据.在程序中,可以定义一个 指定大小的结构数组来作为栈,序号为0的元素就是栈底,在定义一个top保 存栈顶的序号. 链式栈结构:即使用链式形式保存栈中各元素的值.链表首部(head引用所指向元素)为栈顶, 链表尾部(指向地址为null)为栈底. 栈结构遵循:后进先出(

闭关修炼中 *** Java常用算法之 -- 队列结构

什么是队列结构: 队列结构和栈结构很相类似. 和栈结构一样是一种具有特殊的运算规则,从数据的逻辑结构看,队列结构其实 是一种线性结构. 从存储结构来进一步划分,也分为两类: 顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的数据. 在 程序中,可以定义一个指定大小的结构数组作为队列. 链式队列结构:即用链表形式保存队列中各元素的值. 典型的队列结构: 在队列结构中允许对两端进行操作,但两端的操作不同.一端只能删除--队头,一 端只能插入--队尾. 队列的运算规则: 是按照先进后出(Fir

Java中的查找算法之顺序查找(Sequential Search)

Java中的查找算法之顺序查找(Sequential Search) a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位. b) 图例说明: 原始数据:int[] a={4,6,2,8,1,9,0,3}; 要查找数字:8 找到数组中存在数据8,返回位置. 代码演示: import java.util.Scanner; /* * 顺序查找 */ public class SequelSearch { public static vo

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

python基础下的数据结构与算法之顺序表

一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表中元素存放在通过链接构造起来的一系列存储模块里,这样实现的表称为链接表,简称链表. 二.顺序表两种基本形式: 三.顺序表结构: 四.实现方式: 五.增加元素: a. 尾端加入元素,时间复杂度为O(1) b. 非保序的加入元素(不常见),时间复杂度为O(1) c. 保序的元素加入,时间复杂度为O(n)

C#(数据结构):1.顺序表结构

我们程序员有三大优点:懒.困.自负.很荣幸我这三点都占了.但是木有关系这丝毫动摇不了我学习的决心.因为技术没有止境. -------------------------------------------------------------------------------------万恶的分割线------------------------------------------------------ 一个人生的分割线. 曾多少次我告诉自己要和昨天的自己说再见.不带走自己的过去,新中幻想着永

C#(数据结构):1.顺序表结构(2)

人生总有那么多未完的篇章,但是有时候今天你没完成的可能你以后再也不会完成.承诺的一切兴许也变成了过眼云烟.想抓住,握紧的拳头却使他们溜的更快.人生恰如初见,几多的欣喜. ----------------------------------------------------------------------------------------------万恶的分割线------------------------------------------------ 分割线都受不了了.好吧之前我们说

C#(数据结构):1.顺序表结构(3)

程序员的道路艰难险阻,如果有新生派的小学生问我他可以做程序员吗?我会毫不犹豫的告诉他放下程序立地成佛,千万不要踏足这一行.虽然这行妹子很多,但是勿来,勿入,勿学.不要问我为什么,说多了全是泪... -----------------------------------------------------------------------------------万恶的分割线------------------------------------------------- 好吧情感戏也就这么多了,

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子 时间:2012-11-20 17:54:02 在JDBCPreparedStatement.executeQuery().getMetaData();后,我们可以通过ResultSetMetaData对象查询返回结果集的源数据信息,也就是表结构信息. 示例代码如下: package astar.sutil.db; import java.sql.Connection; import java.sql.Driv