栈和队列的链式实现

栈和队列的简单链式实现

简单实现了一下堆栈和队列的链表表示,并不难,然后需要自己注意的地方就是需要注意赋值的顺序千万不要搞反了,如果搞反了很容易就出现nullPointerException。以后排错的时候可以朝这方向检查一下。

/**
* 循环链表结点,和普通链表没什么区别
* @author john
*/
class ListNode{
private int data;
private ListNode next;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
}
/**
* 链表栈实现,注意:单向链表的话只能从头结点进行插入删除。
* @author john
*/
class Stack{
public ListNode head;
public ListNode top;//栈顶指针
public void initStack() {
head = new ListNode();
top=head;//当top==head时候,栈为空。
}
public void enterStack(int data){
ListNode newNode = new ListNode();
newNode.setData(data);
if(top==head){
head.setNext(newNode);
top = newNode;
}else{
newNode.setNext(top);
head.setNext(newNode);
top = newNode;
}
}
public void outStack() {
System.out.println(top.getData());
top = top.getNext();
}
}
/**
*链表队列的实现。
* @author john
*
*/
public class Queue {
public ListNode front;//队列头结点指针变量
public ListNode rear;//队列尾结点指针变量
public void initL(){
front =new ListNode();
front.setNext(null);
rear=front;//开始时候队列头尾相等,赋值的时候一定要注意是后面的值赋给前面的值。
}
/**
* 入队,从尾巴插入元素
* @param data
*/
public void enterQueue(int data) {
ListNode newLNode = new ListNode();
newLNode.setData(data);
if (front.getNext()==null) {//如果是第一个元素
front.setNext(newLNode);
rear=newLNode;
}else {
rear.setNext(newLNode);
rear = newLNode;
}
}
/**
* 出队,从队前面出。
*/
public void leaveQueue() {
System.out.println(front.getNext().getData());
front = front.getNext();
}
public static void main(String[] args) {
Queue queue =new Queue();
queue.initL();
queue.enterQueue(9);
queue.enterQueue(8);
queue.enterQueue(7);
queue.enterQueue(6);
queue.enterQueue(5);
queue.enterQueue(4);
queue.leaveQueue();
queue.leaveQueue();
queue.leaveQueue();
queue.leaveQueue();
queue.leaveQueue();
queue.leaveQueue();//队列测试
Stack stack = new Stack();
stack.initStack();
stack.enterStack(9);
stack.enterStack(8);
stack.enterStack(7);
stack.outStack();
stack.outStack();
stack.outStack();//栈测试
}
}