【資料結構】棧的簡單實現
我們都知道棧(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和