java数据结构(一)——线性链表

原创 2016年06月01日 12:57:22

    与C++类似java数据结构的线性表中也有顺序表和线性表。但是顺序表有几个缺点:1.插入删除操作不方便。2.存储空间必须连续,当表较大时无法申请到足够大的连续存储空间。所以,本文介绍链表结构。

    链表具体结构如下:

    1.数据部分,保存需要存储的数据。

    2.地址部分,保存下一个节点的地址。

代码主要包括数据结构和数据操作。

数据结构部分:

class DATA
{
    String key;  				//结点的关键字 
    String name;
    int age;
} 

class CLType								//定义链表结构
{
    DATA nodeData=new DATA();
    CLType nextNode;
}

数据操作部分:

1.添加节点

 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;
    	}
    }

2.插入头结点

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; 
    	}
    }


3.查找结点

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;								//返回头指针(java中没有指针实际上是头引用)
    }


4.删除结点

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;									//未删除 
    }

5.遍历所有节点

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

6.计算表长

int CLLength(CLType head)						//计算链表长度
    {
        CLType htemp;
        int Len=0;
        htemp=head;
        while(htemp!=null)      							//遍历整个链表 
        {
            Len++; 								//累加结点数量 
            htemp=htemp.nextNode;					//处理下一结点 
        }
        return Len;									//返回结点数量 
    }




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构C语言实现——线性链表

数据结构与算法是语言学习中的重点与难点。之前没学好,现在特地将严蔚敏的《数据结构》C语言版中的伪代码,予以实现,算作是自己再学习一次。同时希望能帮助到那些刚接触数据结构,对书中内容还不甚理解不知如何动...

数据结构线性链表

  • 2007-07-15 17:40
  • 402KB
  • 下载

线性链表-数据结构(2)

一、解析 之所以叫线性,是因为逻辑结构上面是以顺序的存储的。而链的原因是因为在物理的存储结构上面保存后面元素的地址 。数据结构书上对应页码P27-31。 二、存储结构 //int...

数据结构线性链表

数据结构线性链表

  • 2014-10-23 22:42
  • 12KB
  • 下载

数据结构-线性链表

一步入链表啦,链表在查找方面实在麻烦,需要一次次遍历,不过它在插入和删除方面却很从容,只需要改变它的指针域就可实现,和顺序表各有千秋。二1、代码中L始终代表头结点,所以代码中都用其他变量来替代它移动,...

数据结构C语言版线性链表的12个基本操作

线性链表的12个基本操作 分别是:构造 销毁 清空      判空  表长 取元      定位  前驱 后继      插入 遍历;在此为了好记我分别二字短语三三结合 ,接下来会一一解释。...

软件设计师教程 数据结构之线性链表的实现 (C/C++语言)

#include #include   //用于分配地址空间 struct LNode  //定义一个结点,结点包含的内容有,结点所存储的数据,以及该节点指向的下一个结点地址 {     ...

看数据结构写代码(52) 广义表的扩展线性链表存储表示

广义表 的另一种 存储结构是 扩展线性链表存储表示,这种 存储结构的 根 节点 必 存在,并且 根节点的 表尾 为空,将 根节点的 表尾 放 在 表头 的 表尾 指针上。 这样 从 表头 一直 就可...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)