【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)
栈(Stack)
维基百科: http://en.wikipedia.org/wiki/Stack_(abstract_data_type)
在栈中,被删除的是最近插入的元素:栈实现的是一种后进先出(last-in, first-out, LIFO)策略。
栈上的INSERT操作称为压入(PUSH), 而无元素参数的DELETE操作称为弹出(POP)。
伪码:
STACK-EMPTY(S)
if S.top == 0
return TURE
else return FALSE
PUSH(S, x)
S.top = S.top + 1
S[S.top] = x
POP(S)
if STACK-EMPTY(S)
error "underflow"
else S.top = S.top - 1
return S[S.top + 1]
队列
维基百科: http://en.wikipedia.org/wiki/Queue_(abstract_data_type)
在队列中,被删去的总是在集合中存在时间最长的那个元素:队列实现的是一种先进先出(first-in, first-out, FIFO)。
队列上的INSERT操作称为入队(ENQUEUE),DELETE操作称为出队(DEQUEUE);如栈的POP操作一样,DEQUEUE操作也没有元素参数。
伪码:
ENQUEUE(Q, x)
Q[Q.tail] = x
if Q.tail == Q.length
Q.tail = 1
else Q.tail = Q.tail + 1
DEQUEUE(Q)
x = Q[Q.head]
if Q.head = Q.length
Q.head = 1
else Q.head = Q.head + 1
return x
链表
维基百科: http://en.wikipedia.org/wiki/Linked_list
链表是一种这样的数据结构,其中的各对象按线性顺序排列。
单向链表:
双向链表:
循环链表:
伪码:
(假设以下所处理的链表都是未排序的且是双链的)
LIST-SEARCH(L, k)
x = L.head
while x != NIL and x.key != k
x = x.next
return x
LIST-INSERT(L, x)
x.next = L.head
if L.head != NIL
L.head.prev = x
L.head = x
x.prev = NIL
LIST-DELETE(L, x)
if x.prev != NIL
x.prev.next = x.next
else L.head = x.next
if x.next != NIL
x.next.prev = x.prev
iOS 开发讨论群:82873648
本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
博客园博客已停止更新,博客地址:dyingbleed.com