資料結構和演算法 java實現棧結構

2021-07-16 14:50:53 字數 2771 閱讀 8129

棧的定義  

棧(stack

)是限制僅在表的一端進行插入和刪除運算的線性表。  

(1)通常稱插入、刪除的這一端為棧頂 (

top),另一端稱為棧底 (

bottom

)。  

(2)當表中沒有元素時稱為空棧。  

(3)棧為後進先出(

last in first out

)的線性表,簡稱為 

lifo 

表。  

棧的修改是按後進先出的原則進行。每次刪除(退棧)的總是當前棧中" 

最新"的元素,即最後插入(進棧)的元素,而最先插入的是被放在棧的底部, 

要到最後才能刪除。 

【示例】元素是以a1,a2

,…,an

的順序進棧,退棧的次序卻是an,

an-1

,…, 

a1。  

2、棧的基本運算   (1

)initstack(s

)  

構造乙個空棧s

。   (2)

stackempty(s

)  

判棧空。若s

為空棧,則返回

true

,否則返回

false

。   (3)

stackfull(s

)  

判棧滿。若s

為滿棧,則返回

true

,否則返回

false

。  

注意: 該運算只適用於棧的順序儲存結構。  

(4)push(s

,x)  

進棧。若棧s

不滿,則將元素x插入

s的棧頂。   (5

)pop(s

)  定義堆疊adt

stackadt

package stack;

public inte***ce stackadt 

鏈式實現:

在棧的一段新增和刪除元素,在棧中維護乙個指向棧頂的結點和乙個count

變數指示棧的大小:

private linearnode top; //指向棧頂

private int count;//標記棧的大小

每次出棧和壓棧在鍊錶的表頭:(也可以再表尾,實現方式不一樣而已)

top--->元素

1--->

元素2--->

元素3.........

實現(附帶測試main

):linkedstack

package stack;

import bag.linearnode;

//為了重點來實現演算法,將異常情況直接列印出然後退出程式,不再宣告異常類

public class linkedstack implements stackadt 

public linkedstack()

public int size() 

public boolean isempty() 

public void push(object element) 

public object pop() 

object result = top.getelement();

top = top.getnext();

count--;

return result;

}public object peek() 

}執行結果:將0到

10依次壓棧

連續執行5

次出棧操作

棧為空嗎?: false

棧的大小為: 5

棧頂元素為: 4

棧頂元素為: 4

陣列實現:

棧底總是陣列下標為0

的位置,入棧出棧從陣列下標的最後乙個元素開始:

private object contents;

private int top;//top標記下乙個入棧的位置,同時也表示棧的容量大小,跟鏈式實現的

count

比較一下!!!

實現(附帶測試main

):arraystack

package stack;

public class arraystack implements stackadt 

public void expand()

public int size() 

public boolean isempty() 

public void push(object element) 

public object pop() 

object result = contents[top-1];

contents[top-1] = null;//出棧

top--;

return result;   

/*書上這樣寫簡便一點:::

* top--;

* object result = contents[top];

* contents[top] = null;*/       

}public object peek() 

public static void main(string args) 

}執行結果:將0到

24依次壓棧,然後連續

10次出棧

棧的大小為: 15

棧為空嗎?: false

棧頂元素為: 14 

資料結構 2 棧結構(java實現棧結構)

棧結構是按照 後進先出 last in first out,lifo 的原則處理資料的。在棧結構中,只有棧定的元素是可以訪問的。public class stack 入棧同時棧頂下標加1 public void push int elem else 出棧刪除棧頂元素,同時棧頂元素下標減1 publi...

資料結構和演算法 棧的實現

02stack.cpp include using namespace std include typedef string t class stack void push const t d throw const char 資料入棧成為棧頂 t pop throw const char 棧頂資料...

Java資料結構與演算法 棧和佇列

主要涉及三種資料儲存型別 棧,佇列,優先順序佇列。這些資料儲存型別的生命週期比陣列等資料結構要短得多,在程式執行期間才被建立。棧的主要機制可以用陣列來實現 佇列,優先順序佇列可以使用陣列或者一種特別的樹 堆來實現。通過對陣列進行封裝,使得他們面向的問題更加專業。1 在這些資料結構中,只有乙個資料項可...