【数据结构】

一、架构梳理

  • 线性(1:1)

    • 线性表

      • 顺序存储 –> arr
      • 链式存储 –> 指针 (有头,无头

        有头是指有一个不存数据的头,始终作为这个链表的起点。

        会更加简单,无头的话,更改首部节点会麻烦。

        头节点不仅可以作为起点,还可以作为存储信息的仓库,因为头节点只有*next是必须的。

        • 单链表
          • 循环
          • 不循环
        • 双向链表

          lib四个版本,第一个最基础完善,第二个改成了变长结构体,第三个在第二个的基础上封装了函数指针,第四个在第二个的基础上隐藏了数据结构,只暴露接口。

          学到这里可以去读一下内核有关list的实现,主要都是宏和内联函数。

          • 循环
          • 不循环
    • 队列

      练习:

      1. 表达式计算

      2. 球钟算法
        三个栈,1h,5min,1min。27个球,过了多久队列里又是1到27的顺序。

  • 树状(1:N)

    递归递归非递归

    • 深度:层数

    • 度:子树的个数

    • 叶子:边缘节点

    • 孩子:与父节点对应

    • 兄弟:相同父节点

    • 堂兄弟:相同爷节点

    • 二叉树:

      • 满二叉树:深度为k且节点为2^k-1的二叉树
      • 完全二叉树:一颗二叉树,只有倒数两层可以存在不满两个孩子的节点,且单个孩子时只能是左孩子
    • 存储:

      • 顺序:直观,但是浪费空间
        满二叉树:父节点n,左孩子2n,右孩子2n+1
      • 链式:灵活,空间利用率高
    • 遍历

      先加中,或者,中加后,都可以逆推出树。先加后不行。

      • 按行
      • 先序(根,左,右)
      • 中序(左,根,右)
      • 后序(左,右,根)
    • 平衡:

      有很多种条件判定。

      这棵树的左右子树个数差值为1。

    • 广义表

      ( root ( left ) ( right) ),进行嵌套。

    • 搜索树

      空间换时间,查找是**o(1)**。

      课后作业:词频统计

  • 图(N:M)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值