链队列

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

链队列代码结构

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. 使用EMOJI表情

    因为IOS系统支持日文中的字块编码,所以在UILable,UITextField,UIAlertView等控件中使用emoji表情编码(emoji就是表情符号:词义来自日语(えもじ,e-moji,mo ...

  2. INFORMATION_SCHEMA.COLUMNS 查询表字段语句

    INFORMATION_SCHEMA.COLUMNS 视图以 sysobjects.spt_data type_info.systypes.syscolumns.syscomments.sysconf ...

  3. h5 canvas

    概述 Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap). 使用前,首先需要新建一个canvas网页元素. & ...

  4. Dapper基本增删改查

    说明: 1.在using语句块中不用dbConnection.Open(),因为Execute方法中会Open,并且在执行完成会Close. 2.在Ado.Net中要手动Open,在Using语句块中 ...

  5. (七)Angularjs - 控制器

    控制器的作用 没有控制器/controller,我们没有地方定义业务模型 比如:ng-init指令.我们可以使用ng-init指令在scope对象上定义数据 <div ng-init=" ...

  6. php中iconv函数的一个小bug--转载

    iconv转换字符集很好用,但是有时候你会发现iconv转换的时候会返回false或者空字符串,严格说来这算不上是iconv的问题,这其实是字符集的问题,但是实际编码中应该算是iconv的bug了. ...

  7. OREACLE 数据库建表 添加判断表是否存在 不存在则新建

    declare  cnt number; begin   ---查询要创建的表是否存在   select count(*)into cnt from user_tables where table_n ...

  8. URAL 1008 - Image Encoding(bfs坑爹题)

    坑爹题,两种输入输出互相交换,裸bfs #include <stdio.h> #include <string.h> typedef struct { int x; int y ...

  9. c++虚函数的学习

    1.虚函数 #include<iostream.h> class Base { public: void print() { cout<<"Base"< ...

  10. [HDU1017]Exact cover[DLX][Dancing Links详解][注释例程学习法]

    Dancing Links解决Exact Cover问题. 用到了循环双向十字链表. dfs. 论文一知半解地看了一遍,搜出一篇AC的源码,用注释的方法帮助理解. HIT ACM 感谢源码po主.链接 ...