public interface LinkQueueInterface {
void ClearQueue();//清空队列
boolean QueueEmpty();//判断队列是否为空
int QueueLength();//队列长度
boolean EnQueue(QueueNode node);//新元素入队
boolean DeQueue(QueueNode node);//队首元素出队
void QueueTraverse();//遍历队列
}
public class QueueNode {
private final DataType dataType;
private QueueNode next;
public QueueNode() {
next = null;
dataType = new DataType();
}
class DataType{
public int data;
}
public DataType getDataType() {
return dataType;
}
public QueueNode getNext() {
return next;
}
public void setNext(QueueNode next) {
this.next = next;
}
}
public class LinkQueue implements LinkQueueInterface {
private QueueNode Head;//头指针
private QueueNode Tail;//尾指针
private int Length;//长度
public LinkQueue() {
Head = new QueueNode();
Tail = Head;
Length = 0;
}
@Override
public void ClearQueue() {
// TODO Auto-generated method stub
QueueNode currentNode = Head;
while(currentNode.getNext()!=null) {
currentNode.setNext(null);
currentNode = currentNode.getNext();
}
Head.setNext(null);
Tail = Head;
Length = 0;
}
@Override
public boolean QueueEmpty() {
// TODO Auto-generated method stub
return (Length==0?true:false);
}
@Override
public int QueueLength() {
// TODO Auto-generated method stub
return Length;
}
@Override
public boolean EnQueue(QueueNode node) {
// TODO Auto-generated method stub
QueueNode preNode = new QueueNode();
preNode.getDataType().data = node.getDataType().data;
Tail.setNext(preNode);
Tail = preNode;
Length++;
return true;
}
@Override
public boolean DeQueue(QueueNode node) {
// TODO Auto-generated method stub
if(QueueEmpty()) {
return false;
}
QueueNode currentNode = Head.getNext();
node.getDataType().data = currentNode.getDataType().data;
if(Head.getNext()==Tail) {
Tail = Head;
}
Head.setNext(currentNode.getNext());
//如果头指针的下一个就是尾指针,需要将尾指针初始化
Length--;
return true;
}
@Override
public void QueueTraverse() {
// TODO Auto-generated method stub
QueueNode currentNode = Head;
while(currentNode.getNext()!=null) {
currentNode = currentNode.getNext();
System.out.println(currentNode.getDataType().data+" ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkQueue queue = new LinkQueue();
QueueNode node1 = new QueueNode();
node1.getDataType().data = 1;
QueueNode node2 = new QueueNode();
node2.getDataType().data = 2;
QueueNode node3 = new QueueNode();
node3.getDataType().data = 3;
QueueNode temp = new QueueNode();
queue.EnQueue(node1);
queue.EnQueue(node2);
queue.DeQueue(temp);
queue.EnQueue(node3);
System.out.println("删除的是: "+temp.getDataType().data);
queue.DeQueue(temp);
System.out.println("删除的是: "+temp.getDataType().data);
queue.QueueTraverse();
}
}