棧(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從頂部刪除物件。乙個很好理解的例子,有一沓書,你可以只拿走 刪除 頂部的書,也可以在頂部新增新書。判斷其中的 是否成對出現 ...