---------------------------------------------节点设置------------------------------------
package com.cn.hbut.domain;
//节点设置
public class Node {
Object data;
Node next;
//初始化一个数据域以及next域均为null的节点
public Node() {
this.data=null;
this.next=null;
}
//生成元素为obj,引用值为n的新节点
public Node(Object obj,Node n){
data=obj;
next=n;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
@Override
public String toString() {
return "Node [data=" + data + ", next=" + next + "]";
}
}
----------------------------------------接口定义-------------------------------------------
package com.cn.hbut.dao;
public interface Queue {
public void clear();
public int length();
public boolean full();
public boolean empty();
//入队
public boolean enque(Object e);
//出队,需要删除第一个元素
public Object dlque();
//获取队头元素
public Object getf();
}
---------------------------------------具体的实现-----------------------------------------
package com.cn.hbut.daoImpl;
import com.cn.hbut.dao.Queue;import com.cn.hbut.domain.Node;
/**
* @author Administrator
* 队列的特点:
* 1.只允许在队尾插入,队首删除元素;
* 2.先进先出
* 3.无大小限制(存贮范围内)
*/
public class LinkedQue implements Queue {
Node front,rear;
public LinkedQue() {
front=rear= new Node();
}
@Override
public void clear() {
front.setNext(null);
//对尾指向队头
rear =front;
}
@Override
public int length() {
int i=0;
Node p= front.getNext();
while(p!=null){
p=p.getNext();
i++;
}
return i;
}
@Override
public boolean full() {
return false;
}
@Override
public boolean empty() {
return front==rear;
}
@Override
public boolean enque(Object e) {
//加入的节点的next域存放队尾的next域
Node p = new Node(e, rear.getNext());
rear.setNext(p);
//把p设置为队尾
rear=p;
return true;
}
//出队,删除第一个元素
@Override
public Object dlque() {
Node s = front.getNext();
Object obj =s.getData();
front.setNext(s.getNext());
return obj;
}
//获取队首元素,无需删除
@Override
public Object getf() {
return front.getNext().getData();
}
//-----------------------------测试链队--------------------------
public static void main(String[] args) {
//创建一个链队
LinkedQue que = new LinkedQue();
//三个元素开始入队
que.enque(1);
que.enque(2);
que.enque(3);
System.out.println("队列元素大小"+que.length());
//获取队首元素
Object obj=que.getf();
System.out.println("队首元素:"+obj);
//出队一个元素
que.dlque();
//当前的队头元素
System.out.println("出队一个元素后的队首元素:"+que.getf());
}
}