算法导论 第10章 基本数据结构

算法导论 第10章 基本数据结构

栈实现了一种后进先出(LIFO)的策略,栈上的插入称为压入PUSH,删除称为弹出POP。

栈的几种操作:

三种栈操作的执行时间都为O(1)。

队列

队列实现了一种先进先出(FIFO)的策略,队列上的插入称为入队ENQUEUE,删除称为出队DEQUEUE。

队列的操作:

链表

链表是一种各对象按线性顺序排列,其顺序由各个对象的指针决定的数据结构。

双向链表 的结构如下:

链表中每个元素都是一个对象,每个对象有一个关键字key和两个指针next和prev,分别指向其后继元素和前驱元素。若x.prev=NIL则元素x没有前驱,为链表的第一个元素,若x.next=NIL则元素x没有后继,为链表的最后一个元素。L.head指向链表头,若为NIL则链表为空。

链表可以是 单链接双链接 的,若是单链接的则省略每个元素的prev指针。

循环链表 中表头元素的prev指针指向表尾元素,表尾元素的next指针指向表头元素。

  • 链表的搜索,即查找链表中第一个关键字为k的元素:

  • 链表的插入,将x插入到链表前端:

  • 链表的删除,将一个元素从链表中移除:

链表的实现

  • 多数组表示,用3个数组分别表示key以及next和prev的下标:

  • 单数组表示,三个属性key、next和prev分别对应偏移量0、1、2:

用链表表示有根树

  • 二叉树,属性p、left、right分别存放父节点、左孩子和右孩子的指针:

  • 分支无限制的有根树,可以让left存放左孩子,right存放右兄弟:

你可能感兴趣的:(算法导论)