Java算法(链表操作实例)
来源:互联网 发布:手机超星怎么看网络课 编辑:程序博客网 时间:2024/05/16 06:55
Java算法(链表操作实例)
代码:
package com.xu.main;
import java.util.Scanner;
public class P3_1 {
/**
* @功能:链表操作实例
* @作者:
* @日期:2012-10-15
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
CLType node,head = null;
CLType CL = new CLType();
String key,findkey;
Scanner input = new Scanner(System.in);
System.out.println("链表测试。先输入链表中的数据,格式为:关键字 姓名 年龄");
do{
DATA nodeData = new DATA();
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); //显示所有结点
System.out.println("演示插入结点,输入插入位置的关键字:");
findkey = input.next();
System.out.println("输入插入结点的数据(关键字 姓名 年龄):");
DATA nodeData = new DATA();
nodeData.key = input.next();
nodeData.name = input.next();
nodeData.age = input.nextInt();
head = CL.CLInsertNode(head, findkey, nodeData); //插如结点
CL.CLAllNode(head); //显示
System.out.println("演示删除结点,输入要删除的关键字:");
key = input.next();
CL.CLDeleteNode(head, key);
CL.CLAllNode(head);
System.out.println("演示在链表中查找,输入查找关键字:");
key = input.next();
node = CL.CLFindNode(head, key);
if(node != null)
{
nodeData = node.nodeData;
System.out.printf("关键字%s对应的结点为(%s,%s,%d)",key,nodeData.key,nodeData.name,nodeData.age);
}
else
{
System.out.printf("在链表中未找到关键字为%s的结点!",key);
}
}
}
class DATA {
String key; // 关键字
String name;
int age;
}
class CLType // 定义链表结构
{
DATA nodeData = new DATA();
CLType nextNode;
@SuppressWarnings("unused")
CLType CLAddEnd(CLType head, DATA nodeData) // 追加结点
{
CLType node, htemp;
if ((node = new CLType()) == null) {
System.out.println("申请内存失败!");
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;
}
}
@SuppressWarnings("unused")
CLType CLAddFirst(CLType head,DATA nodeData) //在头结点增加结点
{
CLType node;
if((node = new CLType()) == null)
{
System.out.println("申请内存失败!");
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;
}
@SuppressWarnings("unused")
CLType CLInsertNode(CLType head,String findkey,DATA nodeData) //插入结点
{
CLType node,nodetemp;
if((node = new CLType())==null) //分配内存结点的内容
{
System.out.println("申请内存 失败!");
return null;
}
node.nodeData = nodeData; //保存结点中的数据
nodetemp = CLFindNode(head,findkey);
if(nodetemp!=null) //若找到要插入的结点
{
node.nextNode = nodetemp.nextNode; //新插入结点指向关键结点的下一节点
nodetemp.nextNode = node; //设置关键结点指向新插入结点
}
else
{
System.out.println("未找到正确的插入位置!");
//free(node); //释放内存
}
return head;
}
int CLDeleteNode(CLType head,String key) //删除结点
{
CLType node,htemp;
htemp = head;
node = head;
while(htemp!=null)
{
if(htemp.nodeData.key.compareTo(key)==0)
{
node.nextNode=htemp.nextNode; //使前一节点指向当前结点的下一节点
//free(htemp); //释放内存
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;
DATA 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;
}
}
}
运行结果:
- Java算法(链表操作实例)
- Java算法(顺序表操作实例)
- Java算法学习(栈操作实例)
- Java算法(队列操作实例)
- JAVA文件操作(实例)
- 【数据结构与算法】java链表操作
- java日期操作实例
- java File操作实例
- Java文件操作实例
- java IO操作实例
- java操作mongodb实例
- Java操作Mysql实例
- java io 操作实例
- java 数据库连接操作实例
- java File操作实例
- Java IO实例操作
- java xml操作实例
- JAVA操作Mencached实例
- gcc 编译选项
- aba 回文练习 -- 参考罗大神的
- k_over 重叠字符串
- m_sort 归并排序(迭代)
- insert /*+append*/ into (直接插入)logging失效
- Java算法(链表操作实例)
- 设计响应式导航菜单的五大法则
- How to Connect to Oracle via JDBC
- Android ApiDemos示例解析(192):Views->Spinner
- Java Web应用程序开发
- 最近的软考
- 用 C/C++ 写 CGI 程序
- JSP中文乱码问题 页面经过过滤器后得到的是中文,但插入到MYSQL数据库却成了“?”为什么?
- android静默安装的实现(turn)