棧 順序 鏈式 java實現

2021-07-05 11:23:50 字數 2801 閱讀 7202

棧的定義 :

棧(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 當...