给我的好姐姐聊聊天代码也打完了,小弟可是一心二用了,不过代码确实是挺长的。
代码打的时间长短不重要,重要的是理解~理解~理解。重要的事说三遍!!!
每天的重复,恨不得一天过成两天马上结束了,能多学点是点了。
山再高,咱能有耐心。同样如此~哈哈。
贴上代码吧:
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