链队列

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

链队列代码结构

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. android 监听短信数据库,制作短信控制工具,控制别人的手机!!(一)

    序言:本程序示例本着简洁易懂的目的,只做了简单的功能实现,需要用户启动应用,收到短信才有效果.作者将会在后面的(二)篇中加入服务后台运行.自动启动功能,实现一个真正的短信控制工具.本文的目的很简单,让 ...

  2. [Angular 2] Handling Clicks and Intervals Together with Merge

    Observable.merge allows you take two different source streams and use either one of them to make cha ...

  3. lubuntu12.11 source.list

    deb http://ports.ubuntu.com/ubuntu-ports/ precise main universe deb-src http://ports.ubuntu.com/ubun ...

  4. WCF的回调使用实例代码说明

    很多时候我们会遇到,信息及时推送通知的情况,例如:监控设备时及时推送状态.报警信息等,我们就可以用WCF的回调机制来实现,下面以一个监控设备名字为例,如果设备名字发生改变,服务器就马上推送消息给客户端 ...

  5. Android项目中如何用好构建神器Gradle?(转)

    最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...

  6. web03--session

    1.创建session1.jsp <body> <form action="session2.jsp" method="post"> & ...

  7. hdu 2200

    bc上的题目,很水,有很多方法做吧,题意大概就是给定你票数,然后让你求出票数最多的那个下标...... 之前我用两个for循环分开写,一个是读入,然后是判断,提交就wa,后来网上看了别人的,就是不能分 ...

  8. Android开发中在一个Activity中关闭另一个Activity

    比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 Ac ...

  9. java操作csv文件之javacsv.jar应用

    csv文件是分隔文件,如果使用java的io流来写,比较麻烦,这里为大家提供一个javacsv的jar包,这个很方便操作csv文件. 下载地址:https://pan.baidu.com/s/1i46 ...

  10. 使用2to3转换python代码

    如果要把python2编译器下的代码转换升级到python3编译器,可以使用python自带的 2to3工具进行转化: windows下转化: doc 命令窗口: >> python  C ...