1. 程式人生 > 其它 >陣列模擬棧(Stack)

陣列模擬棧(Stack)

棧的介紹

  1.棧是一個先進後出(FILO-First In Last Out)的有序列表

  2.棧(Stack)是限制線性表中元素的插入和刪除只能在線性表的同一端進行的一種特殊線性表。允許插入和刪除的一端為變化的一端,我們稱之為棧頂(top),另一端為固定的一端,我們稱之為棧底(Bottom)。

  3.根據棧的定義可知,最先放入棧中的元素在棧底,最後放入的元素在棧頂,而刪除元素正好先反,最後放入的元素最先刪除,最先放入的元素最後刪除。

  4.圖示:

棧的舉例

  1.用陣列模擬棧的使用,由於棧是一種有序列表,可以使用陣列的結構來儲存棧的資料內容。

  2.示意圖即思路分析

思路分析:

  使用陣列來模擬棧,定義一個top來表示棧頂,初始化為-1

  入棧操作:當有資料加入到棧是,top++;stack[top]=value;

  出棧操作:int value=stack[top]; top--;return value;

原始碼

package com.atxihua;

import java.util.Scanner;

public class ArrayStackDemo {
    public static void main(String[] args) {
        //測試
        //先建立一個ArrayStack物件表示棧
        ArrayStack stack=new
ArrayStack(4); String key=""; boolean loop=true;//控制是否退出選單 Scanner scanner=new Scanner(System.in); System.out.println("show:表示顯示棧"); System.out.println("exit:退出程式"); System.out.println("push:表示新增資料到棧(入棧)"); System.out.println("pop:表示從棧中取出資料(出棧)"); System.out.println(
"請輸入你的選擇"); while (loop){ key=scanner.next(); switch (key){ case "show": stack.list(); break; case "push": System.out.println("請輸入一個整數"); int value=scanner.nextInt(); stack.push(value); break; case "pop": int res=stack.pop(); System.out.println("出棧的資料是:"+res); break; case "exit": scanner.close(); loop=false; break; } } } } //定義一個ArrayStack表示棧 class ArrayStack{ private int maxSize;//棧的大小 private int[] stack;//陣列,陣列模擬棧,資料放在該陣列中 private int top=-1;//top表示棧頂,初始化為-1 //構造器 public ArrayStack(int maxSize) { this.maxSize = maxSize; stack=new int[this.maxSize]; } //棧滿 public boolean isFull(){ return top==maxSize-1; } //棧空 public boolean isEmpty(){ return top==-1; } //入棧-push public void push(int value){ //先判斷是否棧滿 if(isFull()){ System.out.println("棧滿"); return; } top++; stack[top]=value; } //出棧-pop,將棧頂的資料返回 public int pop(){ //先判斷棧是否為空 if(isEmpty()){ throw new RuntimeException("棧空,沒有資料!!"); } int value=stack[top]; top--; return value; } //顯示棧的情況,遍歷棧,需要從棧頂開始顯示資料 public void list(){ //先判斷棧是否為空 if(isEmpty()){ System.out.println("棧空,沒有資料!!"); return; } //需要從棧頂開始顯示資料 for (int i=top;i>=0;i--){ System.out.println(stack[i]); } } }

執行結果

如此,就簡單的用陣列模擬了棧的實現。