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 有根树的表示

    用链式数据结构表示:

    二叉树:很容易

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

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

  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/yesuuu/p/8926354.html
Copyright © 2011-2022 走看看