棧的定義
棧(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 在這些資料結構中,只有乙個資料項可...