在上一篇博文中通过java实现了队列的连续存储,下面来讨论队列的链式存储,即链队列。
链队列的定义:
队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。
链队列的数据存储形式:
链队列基本运算的实现:
package study_02.datastructure.queue;
/**
* 链队列
* @author WWX
*/
public class LinkQueue<T> {
//链的数据结构
private class Node{
public T data;
public Node next;
//无参构造函数
public Node(){}
public Node(T data,Node next){
this.data=data;
this.next=next;
}
}
//队列头指针
private Node front;
//队列尾指针
private Node rear;
//队列长度
private int size=0;
public LinkQueue(){
Node n=new Node(null,null);
n.next=null;
front=rear=n;
}
/**
* 队列入队算法
* @param data
* @author WWX
*/
public void enqueue(T data){
//创建一个节点
Node s=new Node(data,null);
//将队尾指针指向新加入的节点,将s节点插入队尾
rear.next=s;
rear=s;
size++;
}
/**
* 队列出队算法
* @return
* @author WWX
*/
public T dequeue(){
if(rear==front){
try {
throw new Exception("堆栈为空");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}else{
//暂存队头元素
Node p=front.next;
T x=p.data;
//将队头元素所在节点摘链
front.next=p.next;
//判断出队列长度是否为1
if(p.next==null)
rear=front;
//删除节点
p=null;
size--;
return x;
}
}
/**
* 队列长队
* @return
* @author WWX
*/
public int size(){
return size;
}
/**
* 判断队列是否为空
* @return
* @author WWX
*/
public boolean isEmpty(){
return size==0;
}
public String toString() {
if(isEmpty()){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(Node current=front.next;current!=null;current=current.next){
sb.append(current.data.toString() + ", ");
}
int len = sb.length();
return sb.delete(len - 2, len).append("]").toString();
}
}
//测试
public static void main(String[] args) {
LinkQueue<Integer> queue=new LinkQueue<Integer>();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);
queue.enqueue(6);
System.out.println(queue);
System.out.println("出队:"+queue.dequeue());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
System.out.println("出队:"+queue.dequeue());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
System.out.println("出队:"+queue.dequeue());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
}
}
输出结果:
[1, 2, 3, 4, 5, 6]
出队:1
队列长度=5
[2, 3, 4, 5, 6]
出队:2
队列长度=4
[3, 4, 5, 6]
出队:3
队列长度=3
[4, 5, 6]
分享到:
相关推荐
队列实现,数据结构作业练习参考,Java实现,环境eclipes1.8
用Java实现数据结构中的队列 用Java实现数据结构中的队列
Java语言编写的数据结构-队列实现,包括顺序队列和链队列。
队列在计算机术语中使用queue,和list(排)其实是一个意思。队列也是一种数据结构,类似于栈,只是与栈相反,在队列中先... 下面用Java实现队列的基本功能(数组版)。 package cn.zhf.list; public class MyQueu
JAVA实现链表 有序二叉树 队列的代码例子
《计算机科学丛书·数据结构从应用到实现(Java版)》系统地介绍了数据结构以及数据结构与对象之间的联系。主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例...
常用数据结构(堆栈,队列,列表)JAVA代码
基于JAVA实现的常用数据结构代码,JAVA实现复杂度、动态数组、链表、栈、队列、二叉搜索树等
单链队列,详细内容见博文:http://blog.csdn.net/u013071074/article/details/27641665
数据结构和算法分析(java)实现中第三章知识点的总结,主要讲的是表。栈、队列的原理和实现,以及应用。一共17页。
java基础笔记数据结构-队列,详细描述了队列的原理及其实现方式,基础数据结构。
数据结构有关队列的接口,数组形式或者是链表形式的队列实现
包含链表、 栈、 队列、优先级队列、哈希表,绝对原创总结!
基于c语言数据结构中栈和队列思想的简单停车场管理系统,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车...
全书内容浅显易懂,利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入...
关于java数据机构部分,队列的总结,队列实现及操作
java语言实现的数据结构顺序队列,部分代码:public class OrderQueue { int rear=-1; int front=0; String[]queue; public OrderQueue(int initcap)throws Exception{ if(initcap){ throw new Exception(...
数据结构Java队列PPT学习教案.pptx
java中基本的 站 队列等基本数据结构。