随笔 - 65  文章 - 0  评论 - 21  阅读 - 32万

【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

 

posted on   Anthony Li  阅读(744)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
< 2013年4月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11

博客园博客已停止更新,博客地址:dyinigbleed.com

点击右上角即可分享
微信分享提示