图文结合、利于理解的数据结构学习笔记(1)——栈、队列和双端队列

机械工业出版社《数据结构与算法——Python语言实现》学习笔记。

目录

  • 1 栈(数据先入后出)
    • 1.1 Python实现
  • 2 队列和双端队列
    • 2.1 队列(数据先入先出)
    • 2.2 双端队列
    • 2.3 Python实现

1 栈(数据先入后出)

从形式上而言,栈是一种支持以下两种操作的抽象数据类型(ADT),用S表示这一ADT实例:

  • S.push(e):将一个元素e添加到栈S的栈顶。
  • S.pop(e):从栈S中移除并且返回栈顶的元素,如果此时栈是空的,这个操作将出错。
    此外,为了方便,定义了以下访问方法:
  • S.top():在不移除栈顶元素的前提下,返回一个栈S的栈顶元素;若栈为空,这个操作会出错。
  • S.is_empty():如果栈中不包含任何元素,则返回一个布尔值True。
  • len(S):返回栈S中元素的数量。

1.1 Python实现

使用List实现
使用链表实现(效率更高)

2 队列和双端队列

2.1 队列(数据先入先出)

队列的抽象数据类型(ADT)支持如下两个基本方法:

  • Q.enqueue(e):向队列Q的队尾添加一个元素。
  • Q.dequeue():从队列Q中移除并返回第一个元素,如果队列为空,则触发一个错误。
    还包括如下方法:
  • Q.frist():在不移除的前提下返回队列的第一个元素;如队列为空则触发错误。
  • Q.is_empty():如果队列Q没有包含任何元素则返回布尔值True。
  • len(Q):返回队列Q中元素的数量。

2.2 双端队列

  • D.add_first(e):向双端队列的前面添加一个元素。

  • D.add_last(e):向双端队列的后面添加一个元素。

  • D.delete_first():从双端队列中移除并返回第一个元素,如果双端队列为空,则触发一个错误。

  • D.delete_first():从双端队列中移除并返回最后一个元素,如果双端队列为空,则触发一个错误。
    还包括如下方法:

  • D.frist():在不移除的前提下返回双端队列的第一个元素;如双端队列为空则触发错误。

  • D.last():在不移除的前提下返回双端队列的最后一个元素;如双端队列为空则触发错误。

  • D.is_empty():如果双端队列没有包含任何元素则返回布尔值True。

  • len(D):返回双端队列中元素的数量。

2.3 Python实现

使用collections.deque类

双端队列ADT collections.deque 描述
len(D) len(D) 元素数量
D.add_first(e) D.appendleft() 加到开头
D.add_last(e) D.append() 加到结尾
D.delete_first() D.popleft() 从开头移除
D.delete_first() D.pop() 从结尾移除
D.frist() D[0] 访问第一个元素
D.last() D[-1] 访问最后一个元素
D[j] 通过索引访问任意一项
D[j] = val 通过索引修改任意一项
D.clear() 清除所有内容
D.rotate(k) 循环右移k步
D.remove(e) 移除第一个匹配的元素
D.count(e) 统计对e匹配的数量

也可使用双向链表实现
此外,使用collections.deque类还可以实现定长双端队列

你可能感兴趣的:(数据结构学习笔记)