博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【CLRS】《算法导论》读书笔记(四):栈(Stack)、队列(Queue)和链表(Linked List)...
阅读量:7031 次
发布时间:2019-06-28

本文共 1168 字,大约阅读时间需要 3 分钟。

栈(Stack)

维基百科: 

在栈中,被删除的是最近插入的元素:栈实现的是一种后进先出(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]

 

队列

维基百科:  

在队列中,被删去的总是在集合中存在时间最长的那个元素:队列实现的是一种先进先出(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

 

链表

维基百科: 

链表是一种这样的数据结构,其中的各对象按线性顺序排列。

单向链表:

双向链表:

循环链表:

 

伪码: 

(假设以下所处理的链表都是未排序的且是双链的)

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

 

转载于:https://www.cnblogs.com/dyingbleed/archive/2013/04/18/2996517.html

你可能感兴趣的文章
在PC端或移动端应用中接入商业QQ
查看>>
将python3.6软件的py文件打包成exe程序
查看>>
DataTable 排序
查看>>
大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)
查看>>
嵌入式系统在工业控制中的应用
查看>>
使用httpclient异步调用WebAPI接口
查看>>
c++ 类的对象与指针
查看>>
SSTI(模板注入)
查看>>
rbac models
查看>>
[2615]传纸条 sdutOJ
查看>>
类图标注的使用范例
查看>>
NumberFormat注解 DateTimeFormat
查看>>
[转载]PV操作简单理解
查看>>
Acm Dima and Lisa的题解
查看>>
深入浅出Tomcat系列
查看>>
从网页提取的关键字
查看>>
位运算符
查看>>
PHP str_replace() 和str_ireplace()函数
查看>>
什么是全栈工程师
查看>>
Html5新特性
查看>>