用陣列實現棧

2022-09-17 09:33:15 字數 1675 閱讀 3542

用陣列表示棧

選擇用陣列表示棧內容必須預先估計棧的最大容量。在j**a中,陣列一旦建立,其大小是無法改變的,而陣列設定過大可能會浪費大量記憶體,設定過小又可能會溢位。

所以我們希望能夠動態調整陣列a[i]的大小,使得它既足以儲存所有元素,又不至於浪費過多的空間。

首先,實現乙個方法將棧移動到另乙個大小不同的陣列中。

1

private

void resize(int

max)

7 a =temp;

8 }

然後在push()中檢測陣列是否太小。如果沒有多餘的空間,就將陣列的長度加倍。

1

public

void

push(item item)

類似的,在pop()中,先刪除棧頂元素,然後如果棧大小小於陣列的四分之一

就將陣列的長度減半(這樣陣列長度被減半之後約為半滿,在下次需要改變陣列大小之前仍然能夠進行多次push()和pop()操作)。

1

public

item pop()

注:在對pop()的實現中,被彈出的元素的引用仍然存在於陣列中。它永遠不會再被訪問了,但j**a的垃圾**集器無法知道這一點,除非該引用被覆蓋。這種情況(儲存乙個不需要的物件的引用)稱為游離。

在這裡,只需將被彈出的陣列元素的值設定為null即可。

下面給出用陣列表示棧的**實現:

下壓(lifo)棧(能夠動態調整陣列大小的實現):

1

public

class resizingarraystackimplements iterable910

11public

boolean

isempty()

1415

16public

intsize()

1920

21private

void resize(int

capacity)

27 a =temp;28}

2930

31public

void

push(item item)

3536

public

item pop()

4344

45public

item peek()

4849

50public iteratoriterator()

5354

private

class reversearrayiterator implements iterator

6061

public

boolean

hasnext()

6465

public

void

remove()

6869

public

item next() 72}

7374 }

用陣列表示棧的優點:

每項操作的用時都與集合大小無關;

空間需求總是不超過集合大小乘以乙個常數。

用陣列表示棧的缺點:

某些push()和pop()操作會調整陣列的大小:這項操作的耗時和棧大小成正比。

用陣列實現棧

用陣列實現棧,設定三個屬性 1 maxsize 用來記錄這個陣列實現的棧能存放多少個資料 2 long stackarray 定義乙個陣列棧 3 top 記錄棧頂 方法有 1 有參建構函式,建立乙個棧,引數是棧的大小 2 push方法,壓入乙個數字 3 pop方法,彈出棧頂的乙個數字 4 peek方...

java用陣列實現棧

棧是一種先進後出的資料結果 只能在一端 稱為棧頂 top 對資料項進行插入和刪除。stacktest package ch04 public class stacktest system.out.println isfull stack.isfull while stack.isempty clas...

用java陣列實現棧

棧是一種常見的資料結構。如果用一句話來概括棧的特點,估計大部分同學都能脫口而出 後進先出,即先進來的元素儲存在棧的最底部,新來的元素則在棧頂堆積,直到棧滿為止 而取元素的時候,只能從棧頂取,直到棧空為止。整個過程,與摞書的過程很類似 放書的時候都是摞在最上面,取書的時候也是從最上面開始取。要想取出下...