標籤:

棧和隊列

棧:棧上的Insert操作稱為壓入(PUSH),Delete操作稱為彈出(POP)。

可以用一個數組S[1..n]來實現一個最多可容納n個元素的棧。該數組有一個屬性S.top,它指向最新插入的元素。棧中包含的元素為S[1..S.top],其中S[1]是棧底元素,S[S.top]是棧頂元素。當S.top=0時,棧中不包含任何元素,棧空。當S.top=n時,棧滿。

Stack-empty(S)if S.top == 0 return Trueelse return False

Push(S,x)S.top = S.top + 1S[S.top] = x

Pop(S)if Stack-empty(S) error underflowelse S.top = S.top - 1 return S[S.top + 1]

隊列:隊列上的Insert操作稱為入隊列(EnQueue),delete操作稱為出隊列(DeQueue)。

可以用數組Q[1..n]來實現一個最多容納n-1個元素的隊列,該隊列有一個屬性Q.head指向隊頭元素,屬性Q.tail指向下一個新元素將要插入的位置。當Q.head = Q.tail時,隊列為空。當Q.head = Q.tail + 1時,隊列為滿。隊列中的元素存放在位置,Q.head,Q.head+1,Q.head+2...Q.tail-1,並在最後的位置環繞。

EnQueue(Q,x)Q[Q.tail] = xif Q.tail == Q.length Q.tail = 1else Q.tail = Q.tail + 1

DeQueue(Q)x = Q[Q.head]if Q.head = Q.length Q.head = 1else Q.head = Q.head + 1return x

推薦閱讀:

6. ZigZag Conversion(medium) & 7.Reverse Integer(easy)
好好玩的螺旋演算法No.69
插入排序

TAG:演算法 |