1.用數組模擬棧
import java.util.Scanner;
public class ArrayStackDemo1 {
public static void main(String[] args) {
ArrayStack1 arrayStack1 = new ArrayStack1(5);
Scanner scanner = new Scanner(System.in);
boolean loop = true;
String menu = "";
while (loop){
System.out.println("push");
System.out.println("pop");
System.out.println("exit");
System.out.println("list");
System.out.println("top");
System.out.println("請輸入菜單: ");
menu = scanner.next();
switch (menu){
case "push":
System.out.println("請輸入一個數: ");
int data = scanner.nextInt();
arrayStack1.push(data);
break;
case "pop":
System.out.println("出棧的數據是:"+arrayStack1.pop());
break;
case "list":
arrayStack1.list();
System.out.println();
break;
case "top":
System.out.println(arrayStack1.top());
break;
case "exit":
scanner.close();
loop = false;
break;
}
}
}
}
class ArrayStack1{
public int maxSize;
public int [] stack ;
public int top = -1;
public ArrayStack1(int maxSize) {
this.maxSize = maxSize;
stack = new int[maxSize];
}
public boolean isFull(){
return top == maxSize - 1;
}
public boolean isEmpty(){
return top == -1;
}
public void push(int data){
if (isFull()){
System.out.println("棧已經滿了,不能入棧");
return;
}
top ++;
stack[top] = data;
}
public int pop(){
if (isEmpty()){
System.out.println("這個棧是空的!!!");
return 0;
}
int value = stack[top];
top --;
return value;
}
public int top(){
return stack[top];
}
public void list(){
if (isEmpty()){
System.out.println("沒有數據!!");
return;
}
for (int i = top; i >=0 ; i --) {
System.out.print(stack[i]+" ");
}
}
}
2.用鏈表模擬棧
import java.util.Scanner;
public class LinlistStackDemo2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
SingleLinkListStack1 stack1 = new SingleLinkListStack1();
boolean loop = true;
String menu = "";
while (loop){
System.out.println("push");
System.out.println("pop");
System.out.println("show");
System.out.println("top");
System.out.println("exit");
System.out.println("請輸入菜單: ");
menu = scanner.next();
switch (menu){
case "push":
System.out.println("請輸入一個數: ");
int data = scanner.nextInt();
stack1.push(new Node2(data));
break;
case "pop":
System.out.println(stack1.pop());
break;
case "show":
stack1.show();
break;
case "top":
System.out.println(stack1.top());
break;
case "exit":
loop = false;
break;
default:
System.out.println("輸入格式不正確 !!!");
break;
}
}
}
}
class SingleLinkListStack1{
SingleLinkList1 singleLinkList1 = new SingleLinkList1();
public void push(Node2 node2){
singleLinkList1.add(node2);
}
public Node2 pop(){
return singleLinkList1.get();
}
public Node2 top (){
return singleLinkList1.getTop();
}
public void show(){
singleLinkList1.show();
}
}
class SingleLinkList1{
Node2 head2 = new Node2(-1);
public void add(Node2 node2){
Node2 temp = this.head2.getNext();
this.head2.setNext(node2);
node2.setNext(temp);
}
public Node2 get(){
if (this.head2.getNext() == null){
System.out.println("鏈表爲空!!!!");
return null;
}
this.head2 = this.head2.getNext();
return head2;
}
public void show(){
if (this.head2.getNext() == null){
System.out.println("鏈表爲空!!!!");
return ;
}
Node2 temp = this.head2.getNext();
while (temp != null){
System.out.println(temp.getData());
temp = temp.getNext();
}
}
public Node2 getTop(){
return this.head2.getNext();
}
}
class Node2{
private int data;
private Node2 next;
public Node2(int data) {
this.data = data;
}
public void setData(int data) {
this.data = data;
}
public void setNext(Node2 next) {
this.next = next;
}
public int getData() {
return data;
}
public Node2 getNext() {
return next;
}
@Override
public String toString() {
return "Node2{" +
"data=" + data +
'}';
}
}