package com.atguigu.com.atguigu.stack;
/**
* @author carry_C
* @date 2020/6/4 - 11:00
*/
public class LinkedListStackDemo {
public static void main(String[] args) {
LinkedListStack linkedListStack = new LinkedListStack(5);
node node1 = new node(1);
node node2 = new node(2);
node node3 = new node(3);
node node4 = new node(4);
node node5 = new node(5);
linkedListStack.push(node1);
linkedListStack.push(node2);
linkedListStack.push(node3);
linkedListStack.push(node4);
linkedListStack.push(node5);
for (int i = 0 ; i <= 4 ; i++) {
linkedListStack.pop();
}
}
}
//创建一个栈类管理节点
class LinkedListStack{
private int top = -1;//栈顶
private int maxSize;//栈的最大数据个数
private node head = new node(0);
private node temp;//辅助指针
public LinkedListStack(int maxSize) {
this.maxSize = maxSize;
}
//判断栈是否为空
public boolean isEmpty(){
return top<-1;
}
//判断栈是否满
public boolean isFull(){
return top == maxSize-1;
}
//入栈
public void push(node newnode){
//判断栈是否满
if(isFull()){
throw new RuntimeException("栈满,无法加入数据");
}
if(head.getNext() == null){
head.setNext(newnode);
temp = newnode;
top++;
}else{
temp.setNext(newnode);
temp = temp.getNext();
top++;
}
}
//出栈
public void pop(){
node temp1;//辅助节点
int num;//辅助
//判断栈是否为空
if(isEmpty()){
throw new RuntimeException("栈空,无法执行出栈操作");
}
while(head.getNext()!=null){
num = -1;
temp1 = head;
while(num < top-1){
temp1 = temp1.getNext();
num++;
}
System.out.println(temp1.getNext());
temp1.setNext(null);
top--;
}
}
}
//创建一个节点类
class node{
private int data;//数据
private node next;//指针域
//构造器
public node(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public node getNext() {
return next;
}
public void setNext(node next) {
this.next = next;
}
@Override
public String toString() {
return "node{" +
"data=" + data +
'}';
}
}
结果截图: