1. 程式人生 > >棧 介紹及簡單實現

棧 介紹及簡單實現

一、棧介紹 1.1 簡單介紹     棧(stack) 是一個有序線性表,只能在表的一端(稱為棧頂(top))執行插入和刪除操作。最後插入的元素最後一個被刪除,所以,棧也稱為後進先出(LIFO)或先進後出(FILO)線性表。
    入棧(push):表示在棧頂插入一個元素。
    出棧(pop):表示從棧頂刪除一個元素。     試圖對一個空棧執行出棧操作稱為下溢(underflow)
     對一個滿棧進行入棧操作稱為溢位(overflow)。     通常情況下下溢和溢位均認為異常。
1.2 操作     簡單起見,我們使用int型別。
    void push(int data)  將data插入棧
    int pop() 刪除並返回最後一個插入的元素。
    int top() 返回一個最後插入的元素。
    int size() 返回儲存在棧中的元素的個數。
    boolean isEmpty() 判斷棧中是否有元素
    boolean isStackFull() 判斷棧中是否存滿元素。
1.3 棧的常見應用
  • 符號匹配

  • 中輟表示式轉為後輟表示式
  • 計算後輟表示式
  • 實現函式呼叫(包括遞迴)
  • 文字編輯器的撤銷操作。
  • 瀏覽器後退按鈕的實現。
  在後面的介紹中,會對棧的常見應用給出對應案例。 二、棧的實現    2.1   抽象棧 1234567891011121314151617181920212223242526272829303132333435363738    我們使用三種方式實現棧,一種是簡單陣列,一種是動態陣列,最後是單向連結串列
2.2 簡單陣列實現棧 1
import java.util.Arrays;
2 3
/**
4
 * Created by Administrator on 2017/6/24 0024.
5
 */
6
public class SimpleDynamicArrayStack extends  Stack {
7
    private int top;
8
    private int capacity;
9
    private int[] array;
10 11
    public SimpleDynamicArrayStack(int capacity) {
12
        this.capacity = capacity;
13
        array = new int[capacity];
14
    }
15 16
    public void push(int data) {
17
        if(isStackFull()){
18
            expansion();
19
        }
20
        array[top] = data;
21
        top++;
22
    }
23 24
    public int pop() {
25
        if(isEmpty()){
26
            throw new IllegalMonitorStateException("該棧為空棧,無法探出元素");

相關推薦

介紹簡單實現

一、棧介紹 1.1 簡單介紹     棧(stack) 是一個有序線性表,只能在表的一端(稱為棧頂(top))執行插入和刪除操作。最後插入的元素最後一個被刪除,所以,棧也稱為後進先出(LIFO)或先進後出(FILO)線性表。     入棧(pus

mongoDB——自動分片介紹簡單實現

      分片,是指將資料拆分,將其分散到不同的機器上。這樣的好處就是,不需要功能強大的大型計算機也可以儲存更多的資料,處理更大的負載。       mongoDB的分片,是將collection的

StrangeIOC MVCS框架介紹簡單實現

先來看看MVC MVC(Model-View-Controller)是最老牌的的思想,其中Model就是作為資料管理者,View作為資料展示者,Controller作為資料加工者,Model和View又都是由Controller來根據業務需求調配,所以Cont

C++小知識(十)——Eigen介紹簡單使用(PCL庫實現

轉載自:https://blog.csdn.net/fengbingchun/article/details/47378515,          Eigen是可以用來進行線性代數、矩陣、向量操作等運算的C++庫,它裡面包含了很多演算法。它的License是MPL2。它支援

Oracle12cWindows安裝、介紹簡單使用(圖文)

enter database cto 應該 技術 功能 自帶 eve 繼續 1、下載 地址為:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html 含企

Oracle 12c Windows安裝、介紹簡單使用(圖文)

htm 編程 閱讀 arch 用戶 upgrade plsql windows安裝 條件 1、下載 地址為:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/inde

Vue數據綁定原理簡單實現

fragement observe images als 統一 rst react github上 each 本篇文章中的代碼只是部分片段,完整代碼存放於github上https://github.com/Q-Zhan/simple-vue。 進入正文~實現數據綁定主要是要

Parquet介紹簡單使用

Parquet==> 什麽是parquet Parquet 是列式存儲的一種文件類型==> 官網描述: Apache Parquet is a columnar storage format available to any project in the Ha

Spring 容器IOC解析簡單實現

interface utf-8 cat container 就是 pat 註入 () class 最近一段時間,“容器”兩個字一直縈繞在我的耳邊,甚至是吃飯、睡覺的時候都在我腦子裏蹦來蹦去的。隨著這些天一次次的交流、討論,對於容器的理解也逐漸加深。理論上的東西終歸要落實到實

Lucene介紹簡單入門案例(集成ik分詞器)

chinese depend 創建索引 圖片 latest frame numeric id字段 div 介紹     Lucene是apache軟件基金會4 jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個

C++智能指針,指針容器原理簡單實現(auto_ptr,scoped_ptr,ptr_vector).

同時 構造對象 pop 所有 main 操作 bject str 運算 目錄 C++智能指針,指針容器原理及簡單實現(auto_ptr,scoped_ptr,ptr_vector). auto_ptr scoped_ptr ptr_vector C++智能指針,指針容器

Burp Suite掃描器漏洞掃描功能介紹簡單教程

author -s 測試方法 inject psc sql url地址 issue 功能 pageuo 2017-07-25 共852828人圍觀 ,發現 15 個不明物體 工具新手科普 * 本文作者:pageuo,本文屬FreeBuf原創獎勵計劃,未經許可禁止

springboot介紹簡單使用

iba 其他 1.2 服務架構 ron art web 應用 ctr start Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配

菜鳥學SSH——Spring容器IOC解析簡單實現

最近一段時間,“容器”兩個字一直縈繞在我的耳邊,甚至是吃飯、睡覺的時候都在我腦子裡蹦來蹦去的。隨著這些天一次次的交流、討論,對於容器的理解也逐漸加深。理論上的東西終歸要落實到實踐,今天就藉助Spring容器實現原理,簡單說說吧。 簡單的說,Spring就是通過工廠+反射將我們的bean放到它

自適應閾值大津法(OTSU)介紹程式碼實現

https://blog.csdn.net/a153375250/article/details/50970104 演算法原理 最大類間方差法是由日本學者大津於1979年提出的,是一種自適應的閾值確定法,又叫大津法,簡稱OTSU。 我用最簡單的方式解釋一下演算法原理: 這個演算法的思想就

HashMap實現原理分析簡單實現一個HashMap

HashMap實現原理分析及簡單實現一個HashMap 歡迎關注作者部落格 簡書傳送門 轉載@原文地址   HashMap的工作原理是近年來常見的Java面試題。幾乎每個Java程式設計師都知道HashMap,都知道哪裡要用HashMap,知道HashMap和

Kubernetes儲存系統介紹機制實現

一、Kubernetes中儲存的應用場景 在Kubernetes中部署和執行的服務大致分為: 1. 無狀態服務 Kubernetes使用ReplicaSet來保證一個服務的例項數量,如果說某個Pod例項由於某種原因掛掉或崩潰,ReplicaSet會立刻用這個Pod的模版

webpack入門介紹簡單配置

webpack在當前前端工程師常用的一個工程化打包工具,官方對webpack的介紹是:webpack本質上 是一個現代 JavaScript 應用程式的靜態模組打包器(static module bundler)。在 webpack 處理應用程式時,它會在內部建

Spring的Jdbc,事務簡單實現

一.spring 整合 jdbc 基本的專案目錄: 首先要加入的pom.xml配置,也就是引入的依賴,程式碼如下: <!-- spring 測試環境 --> <dependency> <groupId>o

深度學習介紹簡單應用

引言   深度學習背後的主要原理是從大腦中汲取靈感。,這種觀點產生了“神經網路”術語,大腦包含數十億個神經元,它們之間有數萬個連線。 在許多情況下,深度學習演算法類似於大腦,因為大腦和深度學習模型都涉及大量的計算單元(神經元),這些單元在未啟用時並不是活躍的,它們彼此互動時會變得智慧化。 神經元   神經網路