Java数据结构——用双端链表实现队列

//=================================================
// File Name       :	LinkQueue_demo
//------------------------------------------------------------------------------
// Author          :	Common

//类名:FirstLastList
//属性:
//方法:
class FirstLastList_long{
	private Link_long first;
	private Link_long last;

	public FirstLastList_long() {			//构造函数
		this.first = null;
		this.last = null;
	}

	public boolean isEmpty(){
		return (first == null);
	}

	public void insertFirst(long dd){		//从链表的头开始插入
		Link_long newLink = new Link_long(dd);
		if(isEmpty()){
			last = newLink;				//不用改变first
		}
		newLink.next = first;
		first = newLink;
	}

	public void insertLast(long dd){		//从链表的尾开始插入
		Link_long newLink = new Link_long(dd);
		if(isEmpty()){
			first = newLink;			//不用改变last
		}else{
			last.next = newLink;		//在last后面添加新元素,并修改last的位置
		}
		last = newLink;					//注意:只有一个元素的时候,插入要把last也赋为newLink
	}

	public long deleteFirst(){
		Link_long temp = first;		//暂存first
		if(first.next == null){		//如果只有一个元素,把last也赋为null
			last = null;
		}
		first = first.next;			//把next设为first
		return temp.dData;				//返回原来的first
	}

	public void displayList(){
		System.out.println("List(first-->last):");
		Link_long current = first;			//用于不断改变位置实现遍历
		while(current != null){
			current.displayLink();
			current = current.next;
		}
	}

}

//类名:LinkQueue
//属性:
//方法:用双端链表实现队列
class LinkQueue{
	private FirstLastList_long theList;

	public LinkQueue() {						//构造函数
		theList = new FirstLastList_long();		//创建一个双端链表对象
	}

	public void push(long j){				//从链表的尾开始插入,新来的元素在尾部
		theList.insertLast(j);
	}

	public long pop(){
		return theList.deleteFirst();		//从链表的头开始弹出,先进的元素先被弹出
	}

	public boolean idEmpty(){
		return theList.isEmpty();
	}

	public void displayQueue(){
		System.out.println("Queue (front-->rear)");
		theList.displayList();
	}
}

//主类
//Function        : 	LinkQueue_demo
public class LinkQueue_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		LinkQueue theQueue = new LinkQueue();
		theQueue.push(10);
		theQueue.push(20);
		theQueue.push(30);
		theQueue.displayQueue();

		theQueue.pop();
		theQueue.pop();
		theQueue.displayQueue();
	}

}

时间: 2024-10-10 11:58:43

Java数据结构——用双端链表实现队列的相关文章

《Java数据结构与算法》笔记-CH5-链表-5用双端链表实现队列

1 //用双端链表实现队列 2 /** 3 * 节点类 4 */ 5 class LinkQ { 6 private long data; 7 public LinkQ next; 8 9 public LinkQ(long d) { 10 this.data = d; 11 } 12 13 public String toString() { 14 return String.valueOf(this.data); 15 } 16 } 17 /** 18 * 双端链表类 19 */ 20 cl

Java单链表、双端链表、有序链表实现

Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见http://blog.csdn.net/a19881029/article/details/22579759 find:查找包含指定关键字的链接点

JAVA基础——链表结构之双端链表

双端链表:双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用 如上图所示:由于有着对最后一个链结点的直接引用.所以双端链表比传统链表在某些方面要方便.比如在尾部插入一个链结点.双端链表可以进行直接操作 但传统链表只能通过next节点循环找到最后链结点操作.所以双端链表适合制造队列. 下面的双端链表类.有几个重要方法. insertFirst(插入首链结点) 这个方法与上篇博文的单链表是基本一样的.唯一区别就是,多了个last引用的操作.正常由于last是指向尾链结点的引用,

研磨数据结构与算法-02双端链表与双向链表

Node节点: /* * 链结点,相当于是车厢 */ public class Node { //数据域 public long data; //指针域 public Node next; public Node previous; public Node(long value) { this.data = value; } /** * 显示方法 */ public void display() { System.out.print(data + " "); } } 双端链表: /*

Redis源码-数据结构之Adlist双端链表

Redis的Adlist实现了数据结构中的双端链表,整个结构如下: 链表节点定义: typedef struct listNode { struct listNode *prev; struct listNode *next; void *value; } listNode; 链表定义: typedef struct list { listNode *head; listNode *tail; void *(*dup)(void *ptr); void (*free)(void *ptr); i

Java 模拟双端链表

双端链表: 双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用rear 这样在链尾插入会变得非常容易,只需改变rear的next为新增的结点即可,而不需要循环搜索到最后一个节点 所以有insertFirst.insertLast 删除链头时,只需要改变引用指向即可:删除链尾时,需要将倒数第二个结点的next置空, 而没有一个引用是指向它的,所以还是需要循环来读取操作 /** * 双端链表 * @author stone */ public class TwoEndpoint

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

双端链表

双端链表 链表作为数组之外的一种常用序列抽象, 是大多数高级语言的基本数据类型, 因为 C 语言本身不支持链表类型, 大部分 C 程序都会自己实现一种链表类型, Redis 也不例外 —— 实现了一个双端链表结构. 双端链表作为一种常见的数据结构, 在大部分的数据结构或者算法书里都有讲解, 因此, 这一章关注的是 Redis 双端链表的具体实现, 以及该实现的 API , 而对于双端链表本身, 以及双端链表所对应的算法, 则不做任何解释. 读者如果有需要的话,可以参考维基百科的双端链表词条,里面

Data Handler 大模拟 + 双端链表 hdu 4268

E - Data Handler Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description You are in charge of data in a company, so you are called "Data Handler". Different from the data in computer, the data