zoukankan      html  css  js  c++  java
  • 【算法导论】第10章,基本数据结构

    10.1 栈和队列

    都是动态集合,Delete操作是预先设定好的。

    Insert:push Delete: pop

    实现,一个计数器记录元素数量

    同理,队列实现是一个计数器记录首尾元素的位置,如果首元素太过靠后,尾元素可以过来。

    10.2 链表

    双向链表:每一个元素是一个对象,有prev, next两个指针,还有元素本身的数值,两边的元素是None

    L.head指向第一个元素。

    链表搜索 、 插入、 删除、

    哨兵:主要作用:简化边界值的处理!

      看着也像是一个元素,只不过值为空,这样一个双向链表可以变成一个有哨兵的双向循环链表,哨兵位于表头和表尾中间。

    不能滥用哨兵:如果有很多个很短的链表,那么哨兵占用的额外存储空间会造成存储浪费。

    10.3 指针和对象的实现

    对象多数组表示,位置用另一个方向的下标来表示

    对象单数组表示,连续的数组储存所有的信息,位置用下标来表示。优势:允许不同长度的对象存储于同一数组中。

    对象的分配与释放: 一般由gc负责

      以下针对多数组表示的双向链表:

      维护一个单链表:自由表,只有next数组,每个对象不是在链表中,就是在自由表中。自由表类似一个栈,下一个分配的就是刚刚被释放的。

    10.4 有根树的表示

    用链式数据结构表示:

    二叉树:很容易

    节点数量无限制的数:左孩子右兄弟表示法

    其他表示方法:视具体情况而定,例如完全二叉树在堆排序中用一个数组表示。

  • 相关阅读:
    java 数字补齐0
    Ubuntu 12.04中文输入法的安装
    mac 更改word的默认显示比例为125
    接口测试的简介
    接口测试和功能测试的区别
    session、token、cookie的区别
    python接口自动化--get请求
    测试用例之正交排列法
    编写测试用例的方法
    jquery选择器
  • 原文地址:https://www.cnblogs.com/yesuuu/p/8926354.html
Copyright © 2011-2022 走看看