您的位置:首页 > 编程语言 > Java开发

java链式队列

2015-12-17 22:01 459 查看
下面来讨论队列的链式存储,即链队列。




链队列的定义:

队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。




链队列的数据存储形式:






链队列基本运算的实现:

/**
*
*/
package unit5Queue.linked;

/**
* 链式队列
* <p>Title: LinkedQueue</p>
* <p>Description: </p>
* <p>Company: </p>
* @author 夏 杰
* @param <T>
* @date 2015年12月16日 下午11:12:31
* @vesion 1.0
*/
public class LinkedQueue<T> {

//队列头指针
public QueueNode<T> font;
//队列头指针
public QueueNode<T> rear;
//队列数据长度
public int size = 0;

/**
* 初始化队列
* @param rear
*/
public LinkedQueue() {
QueueNode<T> node = new QueueNode<T>(null,null);
node.next = null;
font=rear=node;

}

/**
* 入队列
* @param data
*/
public  void push(T data){
//创建一个新的节点
QueueNode<T> node = new QueueNode<T>(data,null);
//将新的节点插入队尾(通过rear.next=node 这样连起来)
rear.next = node;
rear = node;
size++;
}

/**
* 出队列
*/
public T pop(){

if(rear == font){

try {
throw new Exception("队列为空");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}else{
//node是将要出队列的节点
//注意font节点是不存储数据的
QueueNode<T> node = font.next;
T data = node.data;
font.next = node.next;
//将要出队列的节点删除掉
node = null;
size--;
return data;
}

}

public boolean isEmpty(){
if(font==rear){
return true;
}
return false;
}

/**
* 队列长队
* @return
* @author WWX
*/
public int size(){
return size;
}

public String toString(){
if(isEmpty()){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(QueueNode<T> current = font.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) {
LinkedQueue<Integer> queue = new LinkedQueue<Integer>();
queue.push(1);
queue.push(7);
queue.push(6);
queue.push(34);
queue.push(4);
queue.push(33);
System.out.println(queue);
System.out.println("出队:"+queue.pop());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: