package SingleListStack;
public class ListStack {
public static void main(String[] args) {
//测试
SingleListStack<Integer> singleListStack = new SingleListStack<Integer>();
singleListStack.push(1);
singleListStack.push(2);
singleListStack.push(3);
System.out.println( singleListStack.getLength() );
System.out.println("-----------------------");
System.out.println( singleListStack.peek() );
System.out.println("-----------------------");
System.out.println( singleListStack.pop() );
System.out.println( singleListStack.pop() );
System.out.println( singleListStack.pop() );
System.out.println( singleListStack.pop() );
}
}
//用单链表模拟栈,思路:头插法
class SingleListStack<T>{
//private Stack<T> head = null;
//不需要头节点
private Stack<T> top = null;
//栈空
public boolean isEmpty(){
return top == null;
}
//入栈
public void push(T t){
Stack<T> node = new Stack<T>(t);
if(top == null){
//第一个入栈节点
top = node;
}else {
node.setNext(top);
top = node;
}
}
//出栈
public T pop(){
if (isEmpty()){
throw new RuntimeException("栈为空");
}
//System.out.println("出栈的数据是"+top.getData());
T t = top.getData();
//出栈
top = top.getNext();
return t;
}
//查看栈顶元素
public T peek(){
if (isEmpty()){
throw new RuntimeException("栈为空");
}
return top.getData();
}
//获取当前栈的长度
public int getLength(){
if(isEmpty()){
return 0;
}
int count = 0;
Stack<T> temp = top;
while (temp != null){
count ++;
temp = temp.getNext();
}
return count;
}
}
class Stack<T>{
private T data;
private Stack<T> next;
public Stack(T data){
this.data = data;
}
public void setData(T data){
this.data = data;
}
public T getData(){
return data;
}
public void setNext(Stack<T> next){
this.next = next;
}
public Stack<T> getNext(){
return next;
}
}
使用单链表模拟栈
最新推荐文章于 2024-02-05 15:51:15 发布