博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA链表简单实现
阅读量:4541 次
发布时间:2019-06-08

本文共 5258 字,大约阅读时间需要 17 分钟。

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"); //            free(node);								//释放内存        }        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;  		//使前一结点指向当前结点的下一结点//                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); 		}	}}

  

转载于:https://www.cnblogs.com/elleniou/archive/2013/05/24/3096571.html

你可能感兴趣的文章
前端学习之JavaScript中的 NaN 与 isNaN
查看>>
chrome安装json view插件
查看>>
CSS div 高度满屏
查看>>
页面回发速度由 6 秒减少为 0.6 秒的真实案例!
查看>>
一种实现C++反射功能的想法(一)
查看>>
lvs+keepalived+nginx高性能负载均衡集群
查看>>
XXL-Job高可用集群搭建
查看>>
JDBC
查看>>
Python replace()方法
查看>>
Kestrel: System.Exception: Error -4092 EACCES permission denied
查看>>
mysql select
查看>>
Nginx学习——Nginx进程间的通信
查看>>
5.2 上午
查看>>
[LintCode] Sort Integers 整数排序
查看>>
71. Simplify Path
查看>>
CodeForces - 123E Maze
查看>>
ZOJ 1709 Oil Deposits(dfs,连通块个数)
查看>>
安卓开源项目周报0308
查看>>
记可敬可佩的老车同志
查看>>
Maven in 5 Minutes(Windows)
查看>>