`
西口西
  • 浏览: 10036 次
社区版块
存档分类
最新评论

数据链表

    博客分类:
  • java
阅读更多

 

链表

 

在链表中,逻辑顺序是通过指针实现的。

链表中第一个结点称为根节点,最后一个结点称为尾结点。

在单链表中,一个结点(链表是由一系列的结点组成的)有一个指向下一节点的指针(尾结点除外)。

在双链表中,一个结点有两个指针,一个指向上一节点,一个指向下一节点(首尾结点只有一个指针,另一指针指向为null)。

在循环链表中,根尾结点也都有两个指针,比双链表多出来的那个指针使得根节点的上一节点是尾结点,也使得尾结点的下一结点是根节点,这样整串链表组成了一个首尾相连的环形。

 

链表由一个个的结点组成,结点在内存中开辟的空间又分为两部分,一部分用来存储数据(数据域),另一部分用来存储指针(引用域)。(在单链表中,尾结点的指针指向null)

 

创建一个链表的流程如下:

创建Node 结点类

/**定义一个节点类
 * @param args
 */
public class Node {

	private Object ob;//存储内容
	private Node next;//下一个结点
	private Node pre;//上一个结点
	/*
	 * 定义为结点添加数据对象的方法
	 */
	public void add(Object ob){
		this.ob=ob;
	}
	/*
	 * 定义得到数据对象的方法
	 */
	public Object getob(){
		return ob;
	}
	/*
	 * 定义得到下一个结点的方法
	 */
	public Node getNext() {
		return next;
	}
	/*
	 * 定义添加下一个结点的方法
	 */
	public void setNext(Node next) {
		this.next = next;
	}
	
	/*
	 * 定义得到上一个结点的方法
	 */
	public Node getPre() {
		return pre;
	}

	/*
	 * 定义添加上一个结点的方法
	 */
	public void setPre(Node pre) {
		this.pre = pre;
	}
}

在创建一个链表类chain

public class Chain {
	
	private Node root;//根结点
	private Node tail;//尾结点
	private int size=0;//链表中结点个数
	
	/*
	 * 定义添加结点的方法
	 */
	public void add(Object ob){
		Node node=new Node();
		node.add(ob);
		if(getsize()==0){
			root=node;
			tail=root;
			tail.setPre(null);
		}
		else{
			tail.setNext(node);
			node.setPre(tail);
			tail=node;
		}
	
		size++;
		
	}
	/*
	 * 定义删除结点的方法,根据索引数
	 */
	public void delete(int index){
		Node temp=root;
		if(index<0||index>=size){
			System.out.println("索引越界!");
		}
		else{
			if(index==0){
				root=temp.getNext();
			}
			else{
				if(index==size-1){
					tail=tail.getPre();
				}
				else{
					//temp 是要被删除的那个结点
					temp=getnode(index);
					//找到temp的前一个结点
					Node fnode=temp.getPre();
					System.out.println("dddd"+ fnode.getob());
					//找到temp的后一个结点
					Node nnode=temp.getNext();
					//让前一个和后一个结点双向联系
					fnode.setNext(nnode);
					nnode.setPre(fnode);
//					System.out.println(temp.getob()+"..");
				}
			}
			size--;
		}
	}
	/*
	 * 定义得到结点的方法
	 */
	public Node getnode(int index){
		Node gnode=root;
		if(index<size&&index>=0){
			if(index==0){
				gnode=root;
			}
			else{
				for(int i=0;i<index;i++){
					gnode=gnode.getNext();
				}
			}
			return gnode;
		}
		else
			return null;
	}
	/*
	 * 定义得到链表结点数量size的方法
	 */
	public int getsize(){
		return size;
	}
}

使用队列和链表可以很方便的添加新内容或者删除内容,可以对数量较大的信息进行简单编辑。

分享到:
评论

相关推荐

    数据链表的建立

    数据链表是一种重要的数据结构,尤其在处理动态数据和高效遍历方面表现出色。在计算机科学中,数据链表与数组不同,它不依赖于内存中的连续空间来存储元素,而是通过节点之间的引用或指针连接各个元素。这种灵活性...

    mp3歌词解析项目 数据链表

    在这个“mp3歌词解析项目”中,我们将深入探讨如何使用数据链表来解析和管理这些LRC歌词。 首先,让我们理解什么是数据链表。数据链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素称为节点,每个...

    数据结构之链表,C#链表;数据结构之链表,C#链表

    链表是一种重要的数据结构,它在计算机科学中扮演着至关重要的角色,特别是在处理动态数据集合时。相较于数组,链表不需预先分配连续的内存空间,因此在插入和删除操作上具有更高的灵活性。本主题主要关注C#语言中的...

    数据链表排序

    数据链表排序

    《数据结构》链表的插入和删除操作

    链表作为一种基础且重要的数据结构,在计算机科学中扮演着至关重要的角色。相比于数组,链表在内存管理和操作灵活性上有着独特的优势。本篇文章将详细探讨《数据结构》中链表的插入和删除操作,旨在帮助学习者深入...

    数据链表演示程序.rar_VC 链表_datachain_vc dos_数据结构 演示_链表 演示

    数据链表是计算机科学中数据结构的一个重要组成部分,它在编程中扮演着不可或缺的角色。本压缩包中的"数据链表演示程序"是一个基于VC++ 6.0开发的DOS界面应用,旨在帮助用户理解并可视化数据链表的工作原理。通过这...

    链表类 实现对不同数据的链表操作

    链表是一种常用的数据结构,它在计算机科学中扮演着重要的角色。相较于数组,链表的主要优点在于其动态性,能够方便地进行插入和删除操作,而不需要像数组那样移动大量元素。在这个“链表类”中,我们关注的是如何...

    动态链表数据库(项目)

    动态链表数据库是一种数据结构,它在内存中以节点的形式存储数据,并通过指针将这些节点连接起来,形成一个线性的序列。在这个“动态链表数据库”项目中,开发者实现了一个跨平台的解决方案,能够运行在Windows(win...

    行业-18 基于冷热数据分离方案优化后的LRU链表,是如何解决之前的问题的.rar

    当新的数据进入时,如果当前热数据链表已满,那么需要淘汰最不常使用的热数据,将其移入冷数据链表。若该数据原本就在冷数据链表中,则直接更新其访问状态即可。 此外,优化后的LRU链表可能还会引入预热机制,即在...

    数据结构链表代码

    链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。链表与数组不同,它不依赖于物理存储位置的连续性,而是通过节点之间的引用(或称为指针)来组织数据。在本案例中,...

    数据结构链表合并

    链表是一种常见且重要的数据结构,特别是在处理动态数据集合时。在这个问题中,我们关注的是链表的合并,这是一个常见的操作,特别是在处理排序链表时。我们将深入探讨如何使用C++来实现两个链表的合并。 链表由一...

    城市链表 数据结构链表练习

    城市链表是一种特殊的数据结构,它在数据存储和处理中起着至关重要的作用。在这个练习中,我们将使用链表来管理一系列城市的信息,每个信息包括城市名和位置坐标。链表是计算机科学中的一种基本数据结构,它不同于...

    C#数据结构链表

    链表是一种重要的数据结构,在计算机科学中被广泛用于组织和管理数据。在C#编程语言中,链表提供了高效的数据操作方式,特别是在处理大量数据时,它的灵活性和动态性使得在内存管理上具有显著优势。本篇文章将深入...

    C++ 数据结构 链表

    本文将深入探讨C++中的三种关键链表数据结构:单链表、循环链表和双向链表,以及如何通过面向对象编程来实现它们。 1. **单链表**: 单链表是最基础的链式数据结构,每个节点包含一个数据元素和一个指向下一个节点...

    数据结构链表的课程设计

    数据结构链表的课程设计 本资源是关于数据结构链表的课程设计,包括了链表的程序源代码。下面是对标题、描述、标签和部分内容的详细解释: 标题:数据结构链表的课程设计 这个标题表明了该资源的主要内容是关于...

    数据结构C++链表

    在C++中,链表是一种常见的数据结构,它不同于数组,不需要连续的内存空间来存储元素。本项目专注于C++实现的单链表,提供了一个完整的可运行示例,包括`main.cpp`主程序,以及`linklist.h`和`node.h`两个头文件,...

    数据结构 三叉链表表示的二叉树

    本文将深入探讨一种特殊的数据结构表示——三叉链表表示的二叉树。这种表示方式在C++语言中尤为常见,它允许我们高效地创建、插入、删除节点以及进行循环算法遍历二叉树。 首先,我们要理解什么是二叉树。二叉树是...

    数据结构双向链表

    双向链表是数据结构中的一种,尤其在处理需要前后移动元素的问题时,它的优势尤为突出。本篇文章将详细探讨双向链表的基本概念、结构以及实现,旨在帮助初学者理解并掌握这一重要知识点。 双向链表是一种线性数据...

Global site tag (gtag.js) - Google Analytics