package com.acwer.queue;
public class MyStack<T> {
public static void main(String[] args) {
MyStack<Person> stack=new MyStack<Person>();
stack.push(new Person("宋江"));
stack.push(new Person("卢俊义"));
stack.push(new Person("吴用"));
stack.push(new Person("公孙胜"));
for (int i = 0; i < 10; i++) {
stack.push(new Person("公孙胜"+String.valueOf(i)));
}
for (;;){
if(stack.empty()) break;
System.out.println(stack.pop());
}
}
private StackNode<T> head=new StackNode<>();
private StackNode<T> tail=head;
public void push(T data){
StackNode<T> node=new StackNode<>(data,tail,null);
//尾连前进
tail.next=node;
tail=tail.next;
}
public boolean empty(){
return head==tail;
}
public T pop(){
if(empty()){
throw new RuntimeException("空");
};
StackNode<T> node =tail;
//尾链后退
tail=tail.pre;
//help GC
node.next=null;
node.pre=null;
return node.data;
}
private static class StackNode<T>{
private T data;
public void data(T data){
this.data=data;
}
public T data(){
return this.data;
}
public StackNode<T> pre;
public StackNode<T> next;
public StackNode(){
this(null);
}
public StackNode(T data){
this(data,null,null);
}
public StackNode(T data,StackNode<T> pre,StackNode<T> next){
this.data=data;
this.pre=pre;
this.next=next;
}
}
}
双链表实现栈
最新推荐文章于 2023-05-21 23:18:01 发布