在之前的博文中详细介绍了栈的数组方式实现和队列的数组方式实现学习了链表当然要再实现一波咯!
单链表实现栈
import javax.management.RuntimeErrorException;
/**
* 使用链表实现栈
* @author Mr.Hu
*
*/
public class StackWithLink {
private SingleLinkList list;
public StackWithLink(){
list = new SingleLinkList();
}
/**
*数据压栈
*/
public void push(int data){
list.insertHead(data);
}
/**
* 数据出栈
*/
public int pop(){
LinkNode deleteHead = list.deleteHead();
if(deleteHead!=null)
return deleteHead.getIdata();
throw new RuntimeException("Stack is empty!");
}
/**
* 获取栈顶数据值
*/
public int peek(){
if(!list.isEmpty())
return list.getHead().getIdata();
throw new RuntimeException("Stack is empty!");
}
/**
* 栈是否为空
*/
public boolean isEmpty(){
return list.isEmpty();
}
/**
* 打印栈
*/
public void displayStack(){
System.out.println("top-->bottom:");
list.displayList();
}
}
TestMain代码:
public class TestMain {
public static void main(String[] args) {
StackWithLink stack = new StackWithLink();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.displayStack();
System.out.println("栈顶数据为:"+stack.peek());
stack.pop();
stack.pop();
stack.displayStack();
System.out.println("栈顶数据为:"+stack.peek());
/**result:
* top-->bottom:
* 5 4 3 2 1
* 栈顶数据为:5
* top-->bottom:
* 3 2 1
* 栈顶数据为:3
*/
}
}
双向链表实现队列
不同于栈从一端进又从同一端出,队列如果使用单链表实现显然在出队时时间复制度为O(n),借助于上篇:双端链表就不存在这一问题了。
双端链表相关代码下载
package queueUseFirstLastList;
public class QueueWithLink {
private FirstLastList list;
public QueueWithLink(){
list = new FirstLastList();
}
public boolean isEmpty(){
return list.isEmpty();
}
//入队
public void insert(long data){
list.insertLast(data);
}
//出队
public long remove(){
return list.deleteFirst();
}
public void displayQueue(){
System.out.println("front-->rear:");
list.displayList();
}
}
TestMain:
public class TestMain {
public static void main(String[] args) {
QueueWithLink queue = new QueueWithLink();
queue.insert(1);
queue.insert(2);
queue.insert(3);
queue.displayQueue();
queue.remove();
queue.displayQueue();
/**
* front-->rear:
* 1 2 3
* front-->rear:
* 2 3
*/
}
}