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语言版线性链表的12个基本操作

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

java数据结构与算法-线性表与链表(2)

上一会我们讲到了在java中线性表和链表的创建,数据的添加和删除所消耗的代价。...
  • u013930163
  • u013930163
  • 2015年05月11日 12:44
  • 578

单链表操作(数据结构实验一)

实验内容 1 初始化一个带表头结点的单链表。 2 从表头不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。 3 从表尾不断插入结点建立一个带表头结点的单链表。设表中元素...
  • caduca
  • caduca
  • 2014年09月25日 15:10
  • 1722

数据结构实验报告 链表

一、实验目的(1)掌握线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现; (2)掌握线性表的各种操作(建立、插入、删除等)的实现算法;二、实验仪器及环境:PC计算机 windows 7...
  • wuxuanyi27
  • wuxuanyi27
  • 2016年04月17日 17:57
  • 1857

java 用链表实现线性表

package com.jzm; public class MyLList { private Node firstNode; private int leng...
  • love_Ubuntu
  • love_Ubuntu
  • 2011年08月05日 22:42
  • 1138

[数据结构]02-线性结构1 两个有序链表序列的合并

本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typ...
  • sinat_37273780
  • sinat_37273780
  • 2017年03月14日 17:32
  • 253

数据结构--线性链表

// Liner linked list.cpp : Defines the entry point for the console application. /*-----CODE FOR FUN-...
  • Dream_WHui
  • Dream_WHui
  • 2015年03月02日 16:25
  • 271

数据结构-线性链表

在数据结构的线性链表中,已知L是无表头节点的单链表,且P节点既不是首元节点,也不是尾元节点,则在p节点前插入s节点的算法是?1、q=p;2、p=L;3、while(p->next!=q)p=p->ne...
  • zhuche110
  • zhuche110
  • 2008年05月06日 01:50
  • 434

线性链表---数据结构

  • awen_PC
  • awen_PC
  • 2009年11月10日 23:45
  • 584

数据结构_线性链表

数据结构_线性链表 线性链表的定义如图 算法2.1 两个线性链表LA, LB ,现在求一个新的链表LA = LA ∩ LB eg.LA={0,1,2,3,4,5,6,7,8,9} LB={...
  • changliwei
  • changliwei
  • 2011年08月13日 20:43
  • 234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java数据结构(一)——线性链表
举报原因:
原因补充:

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