下面是使用双向链表实现了队列的进出和栈的push和pop操作
首先是依然是给出双向链表节点NodeType
public class NodeType {
public NodeType llink;
public int data;
public NodeType rlink;
public NodeType(int data){
this.data = data;
}
public NodeType(){
}
}
下面给出了队列的相关操作
public class doubleLinkedListQueue {
/**
* @author Neway
* @function 使用双向链表实现进队和队
*/
public static NodeType front;
public static NodeType rear;
public static void equeue(NodeType node){
if(front == null){ //当有元素一次进入队列的时候,那么它是队首的元素
front = node;
}
if(rear == null){
rear = node;
}
node.rlink = rear; //将新入队的元素node指向原来的尾部元素
rear.llink = node; //原来尾部元素成为了新入队元素node的后一个节点
rear = node; //更新原队列的尾部元素为新入队的元素
}
public static NodeType dequeue(){
NodeType temp = null;
if(front == null){
System.out.println("the equeue is empty!");
return null;
}
temp = front;
front = front.llink;
System.out.println(temp.data);
return temp;
}
public static void main(String args[]){
NodeType head = new NodeType(12);
NodeType a = new NodeType(55);
NodeType b = new NodeType(64);
NodeType c = new NodeType(78);
NodeType d = new NodeType(85);
NodeType e = new NodeType(98);
NodeType f = new NodeType(112);
equeue(head);
equeue(a);
equeue(b);
equeue(c);
equeue(d);
dequeue();
dequeue();
dequeue();
dequeue();
dequeue();
dequeue();
}
}
下面实现对栈的相关操作,比较简单
public class doubleLinkedListStack {
public NodeType top = null;
public void pushStack(NodeType newNode){
newNode.rlink = top;
top = newNode;
}
public NodeType popStack(){
NodeType node = null;
if(top == null){
System.out.println("Stack is empty!");
return null;
}
node = top;
top = top.rlink;
return node;
}
}