棧的定義 :
棧(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
package com.struct.stackadt;
public
inte***ce
stackadt
在棧的一段新增和刪除元素,在棧中維護乙個指向棧頂的結點和乙個count變數指示棧的大小:
private linearnode top; //指向棧頂
private
int count;//標記棧的大小
每次出棧和壓棧在鍊錶的表頭:(也可以再表尾,實現方式不一樣而已)
top--->元素1--->元素2--->元素3.........
具體實現以及測試**:
package com.struct.stackadt;
public
class
linkedstack
implements
stackadt
public
linkedstack()
public
intsize()
public
boolean
isempty()
public
void
push(object element)
public object pop()
object result = top.getelement();
top = top.getnext();
count--;
return result;
}public object peek()
}class linearnode
public
void
setnext(linearnode node)
public linearnode getnext()
public object getelement()
public
void
setelement(object v)
}執行結果為:
將0到10依次壓棧
連續執行5次出棧操作
棧為空嗎?: false
棧的大小為: 5
棧頂元素為: 4
棧頂元素為: 4
棧底總是陣列下標為0的位置,入棧出棧從陣列下標的最後乙個元素開始:
private object contents;
private int top;//top標記下乙個入棧的位置,同時也表示棧的容量大小,跟鏈式實現的count比較一下!!!
**實現為:
package com.struct.stackadt;
public
class arraystack
public
void
expand()
public
intsize()
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
Java實現鏈式棧
陣列 鍊錶 樹等資料結構適用於儲存資料庫應用中的資料記錄,它們常常用於記錄那些現實世界的物件和活動的資料,便與資料的訪問 插入 刪除和查詢特定資料項 而棧和佇列更多的是作為程式設計師的工具來使用。他們主要作為構思演算法的輔助工具,而不是完全的資料儲存工具。這些資料結構的生命週期比那些資料庫型別的結構...
Java的順序棧和鏈式棧
棧是限制在表的一段進行插入和刪除的運算的線性表,通常能夠將插入 刪除的一端為棧頂,例外一端稱為棧底,當表中沒有任何元素的時候稱為空棧。通常刪除 又稱 退棧 叫做彈出pop操作,每次刪除的都是棧頂最新的元素 每次插入 又稱 進棧 稱為壓入push操作。當棧滿的時候,進行push 操作,會上溢,當空棧的...
順序棧 鏈式棧的python實現
棧是一種操作受限的線性表資料結構,特點是只能在一端進行插入和刪除操作,操作順序是先進後出,後進先出 棧根據實現方式可以分為順序棧和鏈式棧,順序棧是用陣列來實現,鏈式棧是用鍊錶來實現 順序棧的出棧操作的只涉及尾端的彈出操作,時間複雜度為o 1 而入棧操作,當插入的操作在順序棧的最大空間時,是o 1 當...