算法导论 基本数据结构

MIT公开课没有讲到的内容,介绍几种基本数据结构
- 栈和队列
- 链表
- 二叉树

栈和队列

栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)

栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进行的

栈操作

队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针。元素总是从队头出,从队尾入。采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用。

队列操作

链表

链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻。采用链表可以灵活地表示动态集合。链表有单链表和双链表及循环链表。

双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev。链表的操作包括插入一个节点、删除一个节点和查找一个节点


双链表操作

二叉树

二叉树(Binary Tree)是一种特殊的树型结构,每个节点至多有两棵子树,且二叉树的子树有左右之分,次序不能颠倒

二叉树

二叉树的性质

  1. 在二叉树中的第i层上至多有2(i-1)个结点(i>=1)。备注:表示此方
  2. 深度为k的二叉树至多有2^k-1个节点(k>=1)。
  3. 对任何一棵二叉树T,如果其终端结点数目为n0,度为2的节点数目为n2,则n0=n2+1

可以采用顺序存储数组和链式存储二叉链表两种方法来存储二叉树

遍历二叉树
先序遍历:先访问根节点,然后先根遍历左子树,最后先根遍历右子树
中序遍历:先中根遍历左子树,然后访问根结点,最后中根遍历右子树
后序遍历:先后根遍历左子树,然后后根遍历右子树,最后访问根结点

推荐阅读更多精彩内容