【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)
2013-04-18 20:27
549 查看
栈(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
维基百科: 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
相关文章推荐
- 【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)
- [笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列
- 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue
- java集合框架:浅谈如何使用LInkedList实现队列(Queue)和堆栈(Stack)
- C++stl 向量,链表,栈,队列(vector, list, stack, queue)
- [数据结构]——链表(list)、队列(queue)和栈(stack)
- 使用链表(LinkedList) mix-in 到其中的栈(Stack)
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- java:队列模拟(自定义链表结构 +LinkedList )
- 【java】队列、优先队列、双端队列Deque、链表LinkedList、阻塞队列(Blocking queue)
- programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation
- 常用数据结构及复杂度 array、LinkedList、List、Stack、Queue、Dictionary、SortedDictionary、HashSet、SortedSet
- 用数组实现栈(Stacks)、队列(Queue)和双向链表(Doubly Linked List)的伪代码
- 队列是一种特殊的线性表。LinkedList类实现了Queue接口,我们可以把LinkedList当成Queue来用。
- ArrayList,LinkedList,Stack,Queue,PriorityQueue 基本概念
- JavaSE第四十三讲:使用LinkedList实现Stack与Queue
- C#常用数据结构:数组,ArrayList,List<>,链表,Queue,Stack,Dictionary
- c#自定义LinkedList Queue Stack
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- LinkedList链表实现队列应用的简单实例