【数据结构】之队列的java实现(二)
来源:互联网 发布:手机上做班服的软件 编辑:程序博客网 时间:2024/03/29 14:12
在上一篇博文中通过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]
0 0
- java 数据结构 之 队列的实现 (二)
- 【数据结构】之队列的java实现(二)
- 【数据结构】之队列的java实现(二)
- 【数据结构】之队列的java实现(二)
- 数据结构之队列的实现(JAVA)
- 数据结构之java实现队列(二)
- 数据结构之队列的java实现
- java数据结构之线性队列的实现
- java数据结构之链式队列的实现
- 数据结构之队列的Java实现
- JAVA数据结构之顺序队列的实现
- JAVA数据结构之链式队列的实现
- JAVA数据结构之循环队列的实现
- 数据结构学习之队列的Java实现
- 数据结构 --- Java之队列的实现
- 数据结构基础(二)队列的实现
- 【数据结构】之队列的java实现(一)
- 【数据结构】之队列的java实现(一)
- UIRefreshControl用法
- 开发实战练习1 jsp+jdbc 登陆程序
- easyui中combobox级联的实现
- ColorPicker 在sublime中的快捷键不可用(ctrl+shift+c)
- STM32的时钟基础知识
- 【数据结构】之队列的java实现(二)
- iOS 获取appstore 版本号
- Android微信内置浏览器 bootstrap vertical-align:middle 无效的问题
- TFT 学习笔记 1
- 环境加密与透明加密对比
- 一个实用的mysql类
- oracle中如何使用TKPROF命令查看Trace file
- 【数据结构】之链栈的java实现
- HDU 5371 - Hotaru's problem(Manacher算法)