算法导论 第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存放右兄弟:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值