`
古尔丹之颅
  • 浏览: 30842 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java总结之 链表实现队列

阅读更多

       链表在我看来就是一种基础的数据结构,它没有一定的排列顺序,但是每个节点内都有指向下一个节点的指针,即使是在java里也是一样的。使用链表可以不用预先设置大小,但是链表不能实现随机读取数据,每次读取数据总是要从根节点开始遍历。相比于数组,虽然数组能实现随机读取数据,但是也同时失去了不用预先设置大小的优点,可能会造成内存空间不必要的浪费!

       在说会链表如何实现队列。首先我们需要创建一个链表的节点类。在节点类里面,我们首先要定义两个节点的属性,一个是节点内的节点数据对象,以及指向下一个节点的指针。在方法的定义中我定义了1、义对下一个节点的引用方法。2、定义获得下一个节点的数据对象的方法。3、定义在当前节点设置数据对象的方法。4、定义获得当前节点数据对象的方法。

       代码实现如下:

package com.czh130717;

public class LinkNode {
	private Object ob;//节点内的数据对象
	private LinkNode next;//对下一个节点的引用
	
	public LinkNode(Object ob){
		this.ob=ob;
	}
	public LinkNode() {
		
	}
	//定义对下一个节点的引用方法
	public void setNext(LinkNode next){
		this.next=next;
	}
	//定义获得下一个节点的数据对象的方法
	public LinkNode getNext(){
		return next;
	}
	//定义在当前节点设置数据对象的方法
	public void setObj(Object obj){
		this.ob=obj;
	}
	//定义获得当前节点数据对象的方法
	public Object getnode(){ 
		return ob; 
		}

}

         定义完一个节点类,再次我们需要定义一个链表类。

链表类里,我们需要定义一个静态的根节点root,和尾节点last。并定义了一个链表添加数据对象的功能

//定义添加功能
		public void add(Object ob){	
			LinkNode lin=new LinkNode(ob);
			if(null==root){					
				root=lin;
				last=root;
			}
			else{
				last.setNext(lin);
				last=lin;
			}
		}

 其中Object ob是我们需要添加的节点数据对象,我们要实例化一个节点对象来存储这个节点数据对象,其次我们要判断链表是否为空,即链表的根节点是否为空,如果root为空,则将该存储了要添加的数据对象的节点设为根节点,并将其设置为尾节点。如果根节点不为空,则将要添加的节点直接调用节点类的定义下一个节点的方法,将其设为last节点的下一个节点,并将该节点设置为最后一个节点。如此反复添加即可。

 

 

       其次我还实现了查询功能。

//定义查询功能,获取节点的功能
		public LinkNode get(int index){
				LinkNode lin=root;
				int c=0;
				while(c!=index){					
					lin=lin.getNext();											
					c++;					
				}
				return lin;
		}

    首先该查询功能是根据要查询数据的索引位置来查询的,当然我们也可以根据要查询数据的具体值来查询。查询,自然要从根节点开始遍历,当遍历到要查询的数据,返回其值即可。

 

 

     插入功能的实现

		//定义一个插入功能,插入第index个节点之后
		public void insert(Object ob,int index){
			LinkNode lk=new LinkNode(ob);
			LinkNode node1=this.get(index-1);
			LinkNode node2=this.get(index);			
			if(root==null){
				root=lk;
			}
			else{				
				node1.setNext(lk);
				lk.setNext(node2);
				}			
			}

 插入功能的实现,无可厚非,便是根据要插入节点的索引值,将其上一个节点直接指向要插入的节点,并将该节点指向下一个节点,自然便实现了插入功能。但是要注意的当节点插入在头尾的位置时,其实没有父节点和子节点的!这个情况要注意!

 

删除功能

		//删除功能;删除指定位置的节点
		public void remove(int index){
			if(index==0){
				root=this.get(index+1);
			}else{
			   this.get(index-1).setNext(this.get(index+1));
		}
			count--;
		}

 获取队列长度

//得到长度功能 
		public int getLength(){ 
		int length=0; 
		LinkNode node=root; 
		while(node!=null){ 
		node=node.getNext(); 
		length++; 		
		} 
		System.out.println(length);
		return length; 		
		} 

 

 

打印功能

			//定义一个打印功能
		public void print(LinkNode root){ 
			if(null != root){
			Object data=root.getnode();
			System.out.println(data); 			
			LinkNode node=root.getNext();
			print(node);			
		} else{
			return;
		}
			System.out.println();
		}}

 让队列实现打印功能,我们需要循环遍历队列,每取出一个节点数据对象便打印一次即可!

 

最后我创建了一个学生类继承该队列类,实现了所有功能!

代码如下:

package com.czh130717;

public class Student extends LinkList {
	public static void main(String[] args){
		LinkList ls=new Student();
		ls.add("李月迪");				
		ls.add("蔡佳");
		ls.add("周一帆");
		ls.add("陈国辉");
		ls.add("胡哥");
		ls.add("刘培森");
		ls.add("段亚辉");
		ls.print(root);
		System.out.println();
		ls.insert("淳震华", 1);
		ls.print(root);			
		ls.remove(0);
		ls.print(root);			
		ls.getLength();						
}
}

 

0
0
分享到:
评论

相关推荐

    Java基于双向链表实现双端队列结构(算法源码)

    * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...

    java 队列 链表 栈

    本篇文章将详细讲解Java中的队列、链表和栈,这些概念是许多初学者和专业人士都需要掌握的基础知识。 首先,我们来谈谈队列。队列是一种先进先出(First In First Out,简称FIFO)的数据结构,类似于现实生活中的...

    堆栈链表与队列链表的基本操作

    学习和理解堆栈和队列的链表实现对理解数据结构和算法至关重要,它们在递归、回溯、任务调度、内存管理等许多领域都有应用。通过编写和运行这些程序,可以加深对这些概念的理解,并提升编程能力。在实际开发中,掌握...

    用链表实现线性表java

    在实际编程中,链表常用于实现栈、队列、哈希表等数据结构,以及解决各种算法问题,如LRU缓存淘汰策略等。理解并熟练掌握链表的实现对于提升编程能力至关重要。 总的来说,用链表实现线性表是数据结构与算法学习中...

    java 数据结构 链表

    总结来说,Java中的链表是一种灵活的数据结构,适用于动态数据集的管理,提供了插入、删除和遍历等基本操作。理解链表的工作原理以及如何在Java中实现和使用链表,是每个Java开发者必备的基础技能。通过深入学习和...

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...

    java链表应用--基于链表实现队列详解(尾指针操作)

    Java链表应用--基于链表实现队列详解(尾指针操作) Java链表应用--基于链表实现队列详解(尾指针操作)是指使用Java语言实现基于链表的队列,并且详细介绍了队列的实现细节,包括链表的改进、链表操作等。 在Java...

    java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

    在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈...

    java使用数组和链表实现队列示例

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,下面介绍一下java使用数组和链表实现队列的示例

    java链表 个人总结

    本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。每个元素(称为节点)包含两部分:数据...

    java版链表实现定时器功能

    此外,可以考虑使用优先队列(如Java的`PriorityQueue`),其内部已经实现了最小堆,可以快速找到最近的任务。 在J2ME(Java 2 Micro Edition)环境中,由于资源有限,我们可能需要更加优化的实现,例如减少内存...

    Java队列实现,数据结构

    总的来说,这个练习通过`Queue.java`和`Node.java`文件,旨在帮助学习者理解如何在Java中实现数据结构——队列,以及如何利用链表作为底层存储结构。这样的练习有助于提高对数据结构的理解,为编写更复杂、高效的...

    java链表实现

    - 队列:链表可以轻松地实现先进先出(FIFO)的队列数据结构。 - 栈:通过调整链表的头部,可以实现后进先出(LIFO)的栈数据结构。 - 搜索引擎的倒排索引:链表可以方便地存储单词与文档之间的关系。 8. **Java...

    假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法 (Java)

    假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法。(Java描述)

    MLDN魔乐JAVA_13链表.MLDN魔乐JAVA_13链表.rar

    链表常用于实现队列、栈、哈希表等数据结构,以及在图形算法、内存管理等领域。 通过学习"MLDN魔乐JAVA_13链表"这个教程,你将掌握链表的基本原理和Java中的具体实现,能够灵活运用链表解决实际问题。这个教程可能...

    JAVA 模拟队列的实现

    本课程设计旨在通过模拟队列的实现,帮助学习者深入理解Java编程以及队列数据结构的运作原理。 队列作为一种线性数据结构,遵循“先进先出”(FIFO)原则,即最早插入的元素最先被移除,而最近插入的元素则在队尾等待...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    本资源提供了Java实现的数据结构代码,包括栈、动态数组、队列、链表和二叉树,这些都是计算机科学中最基础且重要的数据结构。 1. **栈(Stack)**:栈是一种“后进先出”(LIFO)的数据结构,常用于表达式求值、...

    基于双向链表实现双端队列结构算法(java算法源码)

    * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...

    基于java的循环双链表

    在实际开发中,循环双链表常用于需要快速访问链表两端元素的情况,例如实现队列或栈的数据结构。其优点在于可以双向遍历,而且由于是循环的,查找链表的头部和尾部都非常快捷。然而,相比于数组或ArrayList,链表在...

    java版实现环形队列

    总结一下,Java实现环形队列的关键在于理解其循环特性以及如何通过front和rear指针管理队列的状态。通过合理地操作数组或链表,我们可以构建出高性能的环形队列数据结构,服务于各种复杂系统中的数据处理需求。在...

Global site tag (gtag.js) - Google Analytics