【书籍】Java常用算法手册-链表结构
来源:互联网 发布:手机神马打印软件 编辑:程序博客网 时间:2024/06/09 19:46
问题:input为什么会被跳转?
解决方案:重新new 一个Scanner。
import java.util.Scanner;//链表数据元素的类class DATA2{ String key; //结点的关键字 String name; int age;} //数据结点类型//链表的类class CLType //定义链表结构{ DATA2 nodeData = new DATA2(); CLType nextNode; CLType CLAddEnd(CLType head, DATA2 nodeData) //追加结点 { CLType node, htemp; if((node = new CLType()) == null) { System.out.print("申请内存失败!\n"); return null; //分配内存失败 } else { node.nodeData = nodeData; //保存数据 node.nextNode = null; //设置结点引用为空,即为表尾 if(head == null) //头引用 { head = node; return head; } htemp = head; while(htemp.nextNode != null) //查找链表的末尾 { htemp = htemp.nextNode; } htemp.nextNode = node; return head; } } CLType CLAddFirst(CLType head, DATA2 nodeData) { CLType node; if((node = new CLType()) == null) { System.out.print("申请内存失败!\n"); return null; } else { node.nodeData = nodeData; node.nextNode = head; head = node; return head; } } CLType CLFindNode(CLType head, String key) //查找结点 { CLType htemp; htemp = head; //保存链表头引用 while(htemp != null) //若结点有效,则进行查找 { if(htemp.nodeData.key.compareTo(key) == 0) //若结点关键字与传入关键字相同 { return htemp; //返回该结点引用 } htemp = htemp.nextNode; //处理下一结点 } return null; } CLType CLInsertNode(CLType head, String findkey, DATA2 nodeData) //插入结点 { CLType node, nodetemp; if((node = new CLType()) == null) //分配内存失败 { System.out.print("申请内存失败!\n"); return null; } node.nodeData = nodeData; //保存结点中的数据 nodetemp = CLFindNode(head, findkey); if(nodetemp != null) { node.nextNode = nodetemp.nextNode; //新插入结点指向关键结点的下一结点 nodetemp.nextNode = node; //设置关键结点指向新插入结点 } else { System.out.print("未找到正确的插入位置!\n"); } return head; } int CLDeleteNode(CLType head, String key) { CLType node, htemp; //node保存删除结点的前一结点 htemp = head; node = head; while(htemp != null) { if(htemp.nodeData.key.compareTo(key) == 0) //找到关键字,执行删除操作 { node.nextNode = htemp.nextNode; //使前一结点指向当前结点的下一结点 htemp = null; //释放内存 return 1; } else { node = htemp; //指向当前结点 htemp = htemp.nextNode; //指向下一结点 } } return 0; } int CLLength(CLType head) //计算链表长度 { CLType htemp; int Len = 0; htemp = head; while (htemp != null) //遍历整个链表 { Len++; //累加结点数量 htemp = htemp.nextNode; //处理下一结点 } return Len; //返回结点数量 } void CLAllNode(CLType head) //遍历链表 { CLType htemp; DATA2 nodeData; htemp = head; System.out.printf("当前链表共有%d个结点。链表所有数据如下:\n", CLLength(head)); while (htemp != null) { nodeData = htemp.nodeData; //获取结点数据 System.out.printf("结点(%s,%s,%d)\n", nodeData.key, nodeData.name, nodeData.age); htemp = htemp.nextNode; //处理下一结点 } }}/** * P2_2 class * * @author wcy * @date 2017/10/19. */public class P2_2 { public static void main(String[] args) { CLType node, head = null; CLType CL = new CLType(); String key, findKey; Scanner input = new Scanner(System.in); System.out.print("链表测试。先输入链表中的数据,格式为:关键字 姓名 年龄\n"); do { DATA2 nodeData = new DATA2(); nodeData.key = input.next(); if(nodeData.key.equals("0")) { break; //若输入0,则退出 } else { nodeData.name = input.next(); nodeData.age = input.nextInt(); head = CL.CLAddEnd(head, nodeData); //在链表尾部添加结点 } }while(true); CL.CLAllNode(head); //显示所有结点 input = new Scanner(System.in); System.out.print("\n演示插入结点,输入插入位置的关键字:"); findKey = input.next(); //输入插入位置关键字 System.out.print("输入插入结点的数据(关键字 姓名 年龄):"); DATA2 nodeData = new DATA2(); nodeData.key = input.next(); nodeData.name = input.next(); nodeData.age = input.nextInt(); //输入插入结点数理 head = CL.CLInsertNode(head, findKey, nodeData); //调用插入函数 CL.CLAllNode(head); //显示所有结点 System.out.print("\n演示删除结点,输入要删除的关键字:"); key = input.next(); //输入删除结点关键字 CL.CLDeleteNode(head, key); //调用删除结点函数 CL.CLAllNode(head); //显示所有结点 System.out.print("\n演示在链表中查找,输入查找关键字:"); key = input.next(); //输入查找关键字 node = CL.CLFindNode(head, key); //调用查找函数,返回结点引用 if(node != null) { nodeData = node.nodeData; //获取结点的数据 System.out.printf("关键字%s对应的结点为(%s,%s,%d)\n", key, nodeData.key, nodeData.name, nodeData.age); } else //若结点引用无效 { System.out.printf("在链表中未找到关键字为%s的结点!\n", key); } }}
链表测试。先输入链表中的数据,格式为:关键字 姓名 年龄
1 张三 33
2 五五 55
0 0 0
当前链表共有2个结点。链表所有数据如下:
结点(1,张三,33)
结点(2,五五,55)
演示插入结点,输入插入位置的关键字:1
输入插入结点的数据(关键字 姓名 年龄):3 李四 44
当前链表共有3个结点。链表所有数据如下:
结点(1,张三,33)
结点(3,李四,44)
结点(2,五五,55)
演示删除结点,输入要删除的关键字:3
当前链表共有2个结点。链表所有数据如下:
结点(1,张三,33)
结点(2,五五,55)
演示在链表中查找,输入查找关键字:2
关键字2对应的结点为(2,五五,55)
阅读全文
0 0
- 【书籍】Java常用算法手册-链表结构
- Java常用算法手册-01算法概述
- JAVA常用算法手册学习笔记
- 《JAVA常用算法手册》 算法经典题 1.百元买百鸡
- 链表的基本结构及常用算法
- 《JAVA常用算法手册》 算法经典题 3.鸡兔同笼
- 《JAVA常用算法手册》 算法经典题 4.猴子吃桃
- Java算法结构---------线性表
- Java基于双向链表实现列表结构(算法源码)
- 常用书籍
- 在线书籍整理-java/web/算法
- java树形结构 算法
- java 算法结构----单链表
- Java算法结构
- 算法书籍
- 算法书籍
- 算法书籍
- 链表常用算法
- Android ANR调试
- 转载学习- Spring框架中IoC(控制反转)的原理
- 数据结构 平衡二叉树
- getHibernateTemplate().find判断为空
- ios 9和iOS11 NavigationBar结构的差别
- 【书籍】Java常用算法手册-链表结构
- 教你编写 Node.js 中间件,实现服务端缓存(附demo源码)
- 为什么会有许多人认为C盘太满会影响电脑运行速度?
- Vijos 1691题:输油管道问题
- 移动端横竖屏显示页面不全解决方案
- 事件驱动与异步IO
- 使用开发区块链技术智能合约建立数字货币教程
- win10(64bit)上安装MySQL-python
- Java