链队列

实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行。

链队列代码结构

package list.queue;

  public interface Queuable<T>;

  public class QueueNode<T>;

  public class LinkedQueue<T>;

package list;

  public class TestLinkedQueue;

链队列公共接口

 package list.queue;

 public interface Queuable<T> {

     public int length();

     public boolean destroyQueue();

     public void clear();

     public boolean isEmpty();

     public T getHead();

     public boolean add(T element);

     public T remove();

 }

链队列节点类

 package list.queue;

 public class QueueNode<T> {
private T data;
private QueueNode next; QueueNode() {
this(null);
} QueueNode(T data) {
this(data,null);
} QueueNode(T data, QueueNode<T> next) {
this.data = data;
this.next = next;
} public QueueNode<T> getNext() {
return this.next;
} public T getData() {
return this.data;
} public void setNext(QueueNode<T> next) {
this.next = next;
} public void setData(T data) {
this.data = data;
} public String toString() {
return getData().toString();
} }

链队列实现类

 //**************************************************************************
//*队列之链式存储结构链队列-JAVA实现
//*@author Nora-Xie
//*@time 2013-10-07PM22:00
//************************************************************************** package list.queue; import list.queue.QueueNode;
import list.queue.Queuable; //链队列实际就是单链表,只不过是限定了其删除在队头,插入在队尾而已
public class LinkedQueue<T> implements Queuable<T> {
private QueueNode<T> front,rear; public LinkedQueue() {
this(null);
} public LinkedQueue(T element) {
if(element == null) {
front = new QueueNode<T>(null);
rear = front;
}else {
rear = new QueueNode<T>(element);
front = new QueueNode<T>(null,rear);
}
} public int length(){
if(isEmpty()) return 0;
int k = 1;
QueueNode<T> temp = front.getNext();
while(temp != rear) {
k++;
temp = temp.getNext();
}
return k;
} public boolean destroyQueue() {
return false;
} public void clear() {
if(isEmpty()) return;
while(front.getNext() != rear) {
remove();
}
remove();
} public boolean isEmpty() {
return front == rear;
} public T getHead() {
if(isEmpty()) return null;
return front.getNext().getData();
} public boolean add(T element) {
if(element == null) return false;
QueueNode<T> temp = front;
rear.setNext(new QueueNode<T>(element));
rear = rear.getNext();
return true;
} public T remove() {
if(isEmpty()) return null;
T element = front.getNext().getData();
if(length() == 1)
rear = front;
else{
front.setNext(front.getNext().getNext());
}
return element;
} public String toString() {
if(isEmpty()) return "[ ]";
StringBuffer sb = new StringBuffer("[ ");
QueueNode<T> temp = front.getNext();
while(temp != rear) {
sb.append(temp+" ");
temp = temp.getNext();
}
sb.append(temp+" ");
sb.append("]");
return sb.toString();
} }

链队列测试类

 package list;

 import list.queue.LinkedQueue;
import list.queue.Queuable;
import list.queue.QueueNode; public class TestLinkedQueue {
public static void main(String[] args) {
Queuable<String> queue = new LinkedQueue<String>("A");
System.out.println("queue="+queue+" queue.length="+queue.length());
queue.add("B");
System.out.println("queue="+queue+" queue.length="+queue.length());
System.out.println("the removint element="+queue.remove());
System.out.println("queue="+queue+" queue.length="+queue.length());
queue.add("C");
queue.add("D");
System.out.println("queue="+queue+" queue.length="+queue.length());
queue.clear();
System.out.println("queue="+queue+" queue.length="+queue.length());
System.out.println("queue is empty? "+queue.isEmpty());
queue = new LinkedQueue<String>("a");
System.out.println("queue="+queue+" queue.length="+queue.length());
queue.add("b");
queue.add("c");
queue.add("d");
queue.add("e");
queue.add("f");
queue.add("g");
System.out.println("queue="+queue+" queue.length="+queue.length());
System.out.println("queue's head is ["+queue.getHead()+"]");
queue.remove();
System.out.println("queue="+queue+" queue.length="+queue.length());
System.out.println("queue's head is ["+queue.getHead()+"]");
}
}

java与数据结构(8)---java实现链队列的更多相关文章

  1. java与数据结构(6)---java实现链栈

    栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...

  2. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  3. java与数据结构(3)---java实现循环链表

    循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...

  4. java与数据结构(2)---java实现静态链表

    结点类 1 //结点类 2 class Node<T> { 3 private T data; 4 private int cursor; 5 6 Node(T data, int cur ...

  5. 【Java】 大话数据结构(7) 循环队列和链队列

    本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...

  6. java 实现数据结构之队列

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作. 1.队列的顺序存储结构及实现 public class SequenceQueue&l ...

  7. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  8. java实现链队列

    java实现链队列的类代码: package linkqueue; public class LinkQueue { class Element { Object elem; Element next ...

  9. java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表

    java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表   数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...

随机推荐

  1. js禁止浏览器滚屏方法

    在有些需求中需要对页面进行限制页面的查看权限,阻止用户滚动浏览器.那么我们就要禁止鼠标的滚动事件,并且如果浏览器的滚动事件一旦触发我们就将滚动条重置为0就可以了.以下是具体代码: //出现滚动值立马归 ...

  2. Android - Broadcast机制

    以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...

  3. mwc config.h 中文注释

    #ifndef CONFIG_H_ #define CONFIG_H_ /*************************************************************** ...

  4. MediaPlayer 音频播放 示例

    状态机.流程图.生命周期 对播放音频/视频文件和流的控制是通过一个状态机来管理的.下图显示一个MediaPlayer对象被支持的播放控制操作驱动的生命周期和状态. 椭圆代表MediaPlayer对象可 ...

  5. webform repeater

    repeater:由模板构成,解析后模板就不存在了             需要指定数据源进行数据绑定 List<Fruit> list = new FruitDA().Select(); ...

  6. JAVA Hibernate别名排序问题

    今天在做统计功能的时候遇到这样一个问题,由于查询结果为统计的数据,即使用了sum方法生成的字段, else trigger_count end) as hitCount from TriggerSta ...

  7. Mysql锁机制介绍

    Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  8. Swift - 34 - 闭包的基础语法

    //: Playground - noun: a place where people can play import UIKit // 初始化一个整数数组 var arr = [1, 3, 5, 7 ...

  9. HTML5 canvas中的转换方法

    转换方法 scale(scalewidth,scaleheight)                缩放当前绘图至更大或更小 scalewidth         缩放当前绘图的宽度 (1=100%, ...

  10. 自定义ORM框架(转转)

    ORM背景 在数据库界,主流的数据库都是关系型数据库,其采用的关系型数据结构模型,无论从数学上还是实践中都相当的成熟,得到非常广泛的应用.在关系型数据结构理 论中,所有的数据都组织成一个个相互独立的二 ...