package DataStructure._04Stack._02LinkedListStack;
public class Node {
public int data;
public Node next;
public Node() {
}
public Node(int data){
this.data = data;
}
@Override
public String toString() {
return
“栈数据:{data=” + data + ‘}’;
}
}
package DataStructure._04Stack._02LinkedListStack;
public class LinkedListStack {
private int nums = 0;//计数
private int maxSize = 0;//表示栈最大容量
public Node head = new Node();//头节点不能动(永远指向栈顶)
//有参,初始化最大容量值
public LinkedListStack(int maxSize){
this.maxSize = maxSize;
}
//判断栈空?
public boolean isEmpty(){
return nums == 0;
}
//判断栈满?
public boolean isFull(){
return nums == maxSize;
}
//push入栈
public void push(int data){
Node temp = head; //辅助指针
Node newNode = new Node(data);
if(isFull()){
System.out.println(“栈已满!无法添加数据”);
return;
}
newNode.next = temp.next;
temp.next = newNode;
nums++;
}
//pop出栈
public int pop(){
if(isEmpty()){
throw new RuntimeException(“栈空!”);
}
int popNumber = head.next.data;//存放出栈数据
Node temp = head.next.next;//辅助指着temp
head.next = temp;//完成出栈
nums–;
return popNumber;
}
//遍历栈
public void show(){
if(isEmpty()){
System.out.println(“栈空,无法遍历”);
return;
}
Node temp = head.next;
while(temp != null){
System.out.println(temp);
temp = temp.next;
}
}
//查看栈顶数据
public int lookTop(){
if(isEmpty()){
throw new RuntimeException(“栈空,无数据”);
}
return head.next.data;
}
}
package DataStructure._04Stack._02LinkedListStack;
import java.util.Scanner;
public class TestLinkedListStack {
public static void main(String[] args) {
LinkedListStack lls = new LinkedListStack(4);
boolean flag = true;
Scanner sc = new Scanner(System.in);
String command = null;
while(flag){
System.out.println(“push:入栈”);
System.out.println(“pop:出栈”);
System.out.println(“show:遍历栈”);
System.out.println(“lookTop:查看栈顶数据”);
System.out.println(“exit:退出程序”);
System.out.println(“请选择:”);
command = sc.next().trim();
switch (command){
case “push”:
System.out.println(“请输入要入栈的数据:”);
int data1 = sc.nextInt();
lls.push(data1);
break;
case “pop”:
int pop = 0;
try {
pop = lls.pop();
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println(“弹出数据:”+pop);
break;
case “show”:
lls.show();
break;
case “lookTop”:
try {
System.out.println(“栈顶数据为:”+lls.lookTop());
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case “exit”:
sc.close();
flag = false;
break;
default:
System.out.println(“命令输入有误,请仔细核对!”);
break;
}
}
System.out.println(“程序已退出。”);
}
}