堆疊和佇列的實現

2021-10-23 07:20:48 字數 2205 閱讀 9163

棧(stack)又名堆疊,它是一種先進後出(filo)的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

由乙個一維陣列和乙個記錄棧頂元素位置top的變數組成

元素插入陣列的最後,所以top指向陣列元素的最後位置。

刪除只要將top往前移動一位。繼續插入的話,top後面有元素只需覆蓋它就行。直到陣列滿了。

public

class

mystack

public

void

push

(int a)

public

boolean

isempty()

public

intpeek()

public

intpop()

用乙個陣列來實現倆個堆疊,最大程度的利用空間

只需堆疊總=從陣列的倆端開始插入,直到倆個堆疊的top相鄰,這樣陣列就滿了。

堆疊的鍊錶儲存,就是乙個單鏈表。指向棧頂元素的top一直 指向了鍊錶的頭部。

public

class

mystacknode

} node top = null;

public

boolean

isempty()

public

void

push

(int a)

public object peek()

public object pop()

- 佇列(queue):是具有一定操作約束的線性表

-只能在一端插入,另一端刪除

-先進先出

由乙個一維陣列和乙個記錄佇列頭元素的位置front和乙個記錄佇列尾位置的rear組成。首先,隊列為空時,front和rear指向-1的位置,push進來乙個元素,rear++,刪除乙個元素,front++,所以front一直是指向頭元素的前乙個位置,rear指向尾元素。(缺點,如果插入刪除操作重複,陣列前面的空間會浪費)

當變數rear一直到陣列的尾端時,繼續進行插入操作時,可以回到陣列的頭繼續插入,前提是陣列的頭部分空間已經給空了。(缺點在順壞佇列中,佇列中的元素個數是通過front和rear的相對值來確定的,但是判斷佇列是否為空,是否為滿的條件都是front == rear。

)解決方案

(1)使用額外的標記,記錄最後一次是刪除操作還是插入操作。當條件是front == rear時,檢視標記,就可以知道佇列是滿還是空

(2)僅使用n-1個陣列空間,這樣的話條件是front == rear時,佇列是空的,(rear+1) % queue.length == front時,隊列為滿

public

class

myqueue

public

boolean

isempty()

public

boolean

isfull()

public

void

put(

int a)

public

intpop()

public

class

myqueuelist

} node front = null;

node rear = null;

public

boolean

isempty()

//入隊

public

void

put(object e)

rear.next = node;

rear = node;

}//出隊

public object pop()

public

intsize()

return a;

}

使用陣列實現堆疊和佇列

array push 可以實現php語言的堆疊功能。array push 函式的使用心得 1.第乙個引數必須是陣列。2.所有新增的陣列均為索引,即陣列下標。3.num為壓入後 stack所含陣列元素的個數。4.使用陣列的直接賦值也可以實現陣列的進棧功能,例如 array key。num array ...

堆疊和佇列

堆疊是限定插入和刪除操作都在表的同一端進行的線性表。允許插入和刪除元素的一端稱為棧頂,另一端稱為棧底。若棧中無元素,則稱為空棧。一定要記住的是 棧有後進先出的特點,lase in first out,lifo。棧的基本操作除了插入和刪除外,還有建立和撤銷棧等操作。creat 建立乙個空棧 destr...

堆疊和佇列

堆疊是一種後進先出 lifo 的資料結構,在下推堆疊中,只允許兩種操作 將物件推入堆疊,並將物件從堆疊中彈出。元素只能在堆疊頂部新增和刪除。push將物件新增到堆疊頂部,pop從頂部刪除物件。乙個很好理解的例子,有一沓書,你可以只拿走 刪除 頂部的書,也可以在頂部新增新書。判斷其中的 是否成對出現 ...