1. 程式人生 > >【資料結構】棧的簡單實現

【資料結構】棧的簡單實現

我們都知道棧(Stack)是限制僅在表的一段進行插入和刪除運算的線性表

1、通常稱插入、刪除的這一端為棧頂(Top),另一端為棧底(Bottom)

2、當表中沒有元素時被稱為空棧

3、棧為先進後出(Last In First Out)的線性表,簡稱LIFO

棧的修改總是按照先進後出的原則進行

實現程式碼如下:

/**
 * @date 2018/10/26
 * 棧的實現
 */
public class MyStack {
    //底層實現
    private long[] arr;
    private int top;

    public MyStack() {
        arr = new long[10];
        top = -1;
    }

    public MyStack(int maxSize){
        arr = new long[maxSize];
        top = -1;
    }

    /**
     * 新增資料
     * @param value
     */
    public void push(int value){
        arr[++top] = value;
    }

    /**
     * 移除資料
     * @return
     */
    public long pop(){
        return arr[top--];
    }

    /**
     * 檢視資料
     * @return
     */
    public long peek(){
        return arr[top];
    }

    /**
     * 判斷是否為空
     * @return
     */
    public boolean isEmpty(){
        return top == -1;
    }

    /**
     * 判斷是否滿了
     * @return
     */
    public boolean isFull(){
        return top == arr.length - 1;
    }

}

測試類:

/**
 * @date 2018/10/26
 * 測試類
 */
public class TestMyStack {
    public static void main(String[] args) {
        MyStack ms = new MyStack(4);
        ms.push(1);
        ms.push(2);
        ms.push(3);
        ms.push(4);
        System.out.println(ms.isEmpty());
        System.out.println(ms.isFull());

        while (!ms.isEmpty()){
            System.out.println(ms.pop());
        }
        System.out.println(ms.isEmpty());

    }
}

相關推薦

資料結構簡單實現

我們都知道棧(Stack)是限制僅在表的一段進行插入和刪除運算的線性表 1、通常稱插入、刪除的這一端為棧頂(Top),另一端為棧底(Bottom) 2、當表中沒有元素時被稱為空棧 3、棧為先進後出(Last In First Out)的線性表,簡稱LIFO 棧的修改總

資料結構的順序儲存結構 C語言實現

棧(stack),是一種線性儲存結構,它有以下幾個特點: 棧中資料是按照"後進先出(LIFO, Last In First Out)"方式進出棧的。 向棧中新增/刪除資料時,只能從棧頂進行操作。 基本操作 initStack(&S) destroySt

資料結構的佇列的實現

今天,再次實現一下資料結構中的棧和佇列 這次我們用的是C++實現棧和佇列,用到了C++多型的一種特性:泛型程式設計--模板 關於模板這個知識點,我們之前講過,這次就不多說了 Stack.h #pragma once #include<iostream> usi

資料結構實現迷宮尋路問題

思路: 解決迷宮求解的問題,從入口出發,順某一方向向前探索,若能走通,則繼續往前走;否則沿原路退回,換一個方向再繼續探索,直至所有可能的通路都探索到為止。為了保證在任何位置上都能沿原路退回,所以需要用一個後進先出的結構來儲存從入口到當前位置的路徑。因此,在求迷宮通路的演算法

資料結構實現表示式求值

用棧實現表示式求值,涉及到中、字尾表示式轉換的問題。 Expression.h /***************** * Calc_Expression() * 功能: 利用棧實現整數表示式求值 * 輸入: 表示式字串 * 輸出: 求值結果 * 作者: wu

資料結構 實現迷宮演算法

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> using namespace std; #define STACK_INIT

資料結構堆的實現

文章目錄 Heap.h Heap.c Test.c Heap.h #ifndef __HEAP_H__ #define __HEAP_H__ #include<assert.h> #include

資料結構與佇列 Part1:的建立與相關函式

First.棧(Stack) 定義:後進先出的線性表 操作: #include<stack> 標頭檔案 stack<int> s;      建立int型別的棧s s.push(x);         &n

資料結構的儲存結構(二)雙端

雙端棧 雙端棧是為了更有效的利用棧的空間而產生的。 雙端棧是一種特殊的順序棧。 雙端棧適用於一組互補的資料。 雙端棧兩端為底,2個整形表示棧頂指標。 程式碼收穫 主要還是弄清雙端棧的結構。 棧的歸檔 #include <stdio.h> #

資料結構的儲存結構(三)鏈

鏈棧 鏈棧因為不是陣列儲存,所以需要有指向下一個結點的指標 。 鏈棧如果使用頭插法是不需要棧頂指標,即棧頂指標就是頭指標。操作和頭插法連結串列一樣。 鏈棧若用尾插法略麻煩。 程式碼收穫 主要了解鏈棧的資料結構。 鏈棧的結構體中儲存連結下一個結構體的指標,而

資料結構和佇列相關練習題:判斷有效的括號

給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。 具體實現程式碼如下: #pragma once #incl

資料結構順序表實現十進位制轉換任意進位制

/* & File : 進位制準換 * Author : Laugh * Copyright: Laugh * 主題 :對於輸入的任意一個非負十進位制小數,列印輸出與其等值的任意進位制小數 * Date : 2018/10/14 */

資料結構用模版實現大小堆、實現優先順序佇列,以及堆排序

    一、用模版實現大小堆    如果不用模版的話,寫大小堆,就需要分別實現兩次,但是應用模版的話問題就簡單多了,我們只需要實現兩個仿函式,Greater和Less就行了,仿函式就是用類實現一個()的過載就實現了仿函式。這個看下程式碼就能理解了。再設計引數的時候,需要把模版

資料結構的應用--數制轉換(c++)

標頭檔案: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqStack

資料結構的應用---四則運算表示式求值(中綴表示式與字尾表示式轉換)

用計算機實現帶括號的四則運算的方式。 這裡的困難在於乘除運算的優先順序高於加減運算,並且加入了括號,使得問題變得更加困難。 20世紀50年代,波蘭邏輯學家想到了一種不需要括號的字尾表達法,我們也把它稱為逆波蘭表示。 比如:9+(3-1)*3+10/2,如果

資料結構的應用

棧 棧是一種先進後出的的特殊線性表,只允許在固定的一端進行插入和刪除元素操作,進行輸入插入和刪除操作的一端稱為棧頂,另一端稱為棧底 下面採用靜態順序表實現的方式簡單封裝一個棧 儲存方式 #define MAX_SIZE 100 typedef int DataT

資料結構簡單迷宮是否存在路徑(遞迴和非遞迴版)

求簡單迷宮是否存在路徑 程式碼中用到的棧程式碼如下: stack.h #pragma once #include<stdio.h> #include<stddef.h> #include"Maze.h" typedef Pos SeqType

資料結構走迷宮實現

#pragma once #ifndef _MAZE_H_ #define _MAZE_H_ struct Intersection { int left, forwd, right; /

資料結構的應用 I :表示式求值

1. 介紹 表示式分為字首、中綴、字尾。字首表示式,也稱為波蘭表示式,其特點是將操作符置於運算元的前面。字尾表示式,也成為逆波蘭表示式,所有操作符置於運算元的後面。波蘭表示式、逆波蘭表示式均是由波蘭數學家Jan Łukasiewicz所提出的。中綴表示式將操作符放在運算

資料結構與佇列的面試題(二)

一.使用兩個佇列實現(實現棧先進後出的特點)     思路:              1.建立兩個佇列的結構體,並將這倆個佇列(Queue1和Queue2)的結構體封裝到一個結構體裡。                       2.入棧:判斷哪個佇列中為空(Queue1和