package Stack;
import java.util.List;
public class ListStack<T> {
public ListStack() {
}
private static class Node<T>{
public T data; //数据域
public Node<T> next; //后继
public Node(T d,Node<T> n){
data=d;
next=n;
}
}
//栈的高度
private int size;
//栈顶的位置
private int top;
private Node<T> head;
public ListStack(int size){
this.size=size;
head=new Node <>(null,null); //初始化头节点,头节点占用一个元素节点
top=0;
}
//获得栈高度
public int getSize() {
return size;
}
//返回一个代表栈顶的位置的整数 基准为-1
public int getTop() {
return top;
}
/**
* 判断是否为空栈
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 判断是否为满栈
*/
public boolean isFull() {
return (top+1) == size;
}
/**
* 压栈操作
* @param data
* @return
*/
public boolean push(T data) {
if(isFull()) {
System.out.println("the stack is full!");
return false;
} else {
top++; //栈顶指针上升一
/*
* 1、获取到最后一个节点
* 2、新建一个节点
* 3、添加节点之间的关系
* */
Node<T> p;
System.out.println(head.next);
p=head;
while(p.next!=null){
p=p.next;
}
Node<T> newnode=new Node <>(data,null);
p.next=newnode;
}
return true;
}
//获取顶部节点,删除
public Node<T> pop(){
Node<T> p; //创建一个临时代理对象
Node<T> last;
p=head.next;
for (int i=0;i<getTop()-1;i++){
p=p.next;
}
last=p.next;
p.next=null;
top--;
return last;
}
public Node<T> peek(){
Node<T> p; //创建一个临时代理对象
p=head.next;
while(p.next!=null){
p=p.next;
}
top--;
return p;
}
public static void main(String[] args){
ListStack<String> listStack=new ListStack <>(10); //初始化一个长度为3的栈
listStack.push("test1");
listStack.push("test2");
listStack.push("test3");
listStack.push("test4");
System.out.println(listStack.getTop());
System.out.println(listStack.peek().data);
System.out.println(listStack.pop().data);
System.out.println(listStack.peek().data);
}
}
java数据结构——链表实现栈
猜你喜欢
转载自blog.csdn.net/qq_40692753/article/details/82986719
今日推荐
周排行