首页 > 编程知识 正文

java链表结构,java单向链表

时间:2023-05-04 18:24:25 阅读:37275 作者:2387

import java.util.Scanner;

类数据2

{

字符串密钥; //节点关键字

字符串名称;

int age;

}

定义class CLType//链表结构

{

数据2 node data=new data2(;

Cl类型下一个节点;

添加//节点

cltypecladdend(cltypehead,DATA2 nodeData )。

{

Cl类型节点,htemp;

if((node=newcltype ) ) ) ) ) )。

{

System.out.print ('内存申请失败! n ';

返回空值; //内存分配失败

}

else

{

节点. node data=node data; //保存数据

node.nextNode=null; //清空节点指针将成为页脚

if (头==空)//头指针

{

头=节点;

返回头;

}

htemp=head;

wile(htemp.nextnode!=查找空链表的末尾

{

htemp=htemp.nextNode;

}

htemp.nextNode=node;

返回头;

}

}

//添加标题节点

cltypecladdfirst(cltypehead,数据2节点数据)。

{

Cl类型节点;

if((node=newcltype ) ) ) ) ) )。

{

System.out.print ('内存申请失败! n ';

返回空值; //内存分配失败

}

else

{

节点. node data=node data; //保存数据

node.nextNode=head; //头指针指向的节点

头=节点; //头指针指向新节点

返回头;

}

}

//查找节点

cltypeclfindnode(cltypehead,字符串密钥) )。

{

Cl类型h temp;

htemp=head; //保存链表头指针

wile(htemp!=null(//如果节点有效则查找

{

if (h temp.node data.key.com Pareto (key )==0) ) /节点密钥与传入密钥相同时

{

返回时间; //返回到其节点指针

}

htemp=htemp.nextNode; //处理下一个节点

}

返回空值; 返回到//空指针

}

//插入节点

cltypeclinsertnode(cltypehead,字符串查找密钥,DATA2 nodeData ) )。

{

Cl类型节点,节点模板;

if () node=newcltype ) ) )==null )//分配存储节点的内容

{

System.out.print ('内存申请失败! n ';

返回空值; //内存分配失败

}

节点. node data=node data; 保存//节点的数据

节点时间=clfindnode (head,findkey );

节点时间!=null(//如果找到要插入的节点

{

node.next node=node temp.next node; //新插入的节点指向关键节点的下一个节点

nodetemp.nextNode=node; //使关键节点指向新插入的节点

}

else

{

System.out.print ('未找到正确的插入位置! n ';

//free(node ); //释放内存

}

返回头; //返回头指针

}

intcldeletenode(cltypehead,字符串密钥) )。

{

Cl类型节点,htemp; //node保存删除节点的名称

一结点

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;

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;//处理下一结点

}

}

}

public class LinkedList {

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); //显示所有结点

System.out.printf("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.printf("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五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。