数据结构的认知(python为演示)

目录

一、介绍

二、数据结构

1)顺序表(列表

2)链表

3)堆栈

4)队列

5)二叉树

     1. 树的相关概念

     2. 二叉树遍历

        一个青蛙一次可以跳1级台阶或2级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法

        一个青蛙一次可以跳1级、2级、3级...n级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法

一、介绍

二、数据结构

1)顺序表(列表

  • 内存连续,顺序表中的各个元素在内存中占用连续的存储空间。

    • 元素本身连续(顺序表中各个元素所占的内存空间大小相同)

    • 元素外置(元素本身不连续存储,但是存储单元是连续的)

  • 特点

    相对来说比较消耗内存,查找速度快、效率高。

2)链表

  • 内存不连续,链表中的各个节点在内存中占用的不连续的存储空间。

  • 每个节点既存储了具体的数据元素,同时又存储了指向下一个节点的引用。

  • 相对来说比较节约内存,查找速度慢(需要从头到尾遍历)

  • 链表分类

    • 单链表

    • 单向循环链表

    • 双链表

    • 双向循环链表

3)堆栈

  • 限定在一端进行插入和删除操作的线性表。

  • 相关概念

    • 栈顶:负责入栈和出栈

    • 栈底:不进行任何操作

    • 空栈:栈中无元素时

  • 特点

    LIFO:后进先出

  • 实现

    • 顺序栈模型(使用列表实现栈)append() + pop()组合

    • 链式栈模型(使用单链表实现栈)

4)队列

  • 限定在两端进行插入和删除操作的线性表

  • 相关概念

    • 队尾:负责入队

    • 队头:负责出队

    • 空队列:当队列中无元素时

  • 队列特点

    FIFO:先进先出

  • 实现

    • 顺序队列模型(使用列表实现队列)

    • 链式队列模型(使用单链表实现队列)

  • 总结

    顺序栈:append() + pop()

    顺序队列:append() + pop(0)

 

5)二叉树

1. 树的相关概念

  • 节点的度:节点下面子树的个数。

  • 树的度:树中节点的最大度数。

  • 叶子节点:度为0的节点。

  • 节点的层次:根为第一层,具体看节点在第几层。

  • 树的深度:树中节点的最大层次。

  • 完全二叉树:除了最后一层,其余各层的节点数均已达到最大值,并且最后一层的节点要从左向右依次紧密的排列。

  • 满二叉树:各层的节点数均已达到最大值。

  • 二叉搜索树(二叉排序树):对于任意一个节点,所有左边的值都比此节点小,所有右边的值都比此节点大。

  • 平衡二叉树:对于任何一个节点左右子树的高度差小于等于1。

2. 二叉树遍历

  • 广度遍历(层次遍历)

        从上向下,从左向右

  • 深度遍历

    • 前序遍历(根左右)

    • 中序遍历(左根右)

    • 后续遍历(左右根)

   二叉搜索树中序遍历的结果是递增的序列

一个青蛙一次可以跳1级台阶或2级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法

  • 举例大法找规律

    • 1级台阶:1

    • 2级台阶:2

    • 3级台阶:3

    • 4级台阶:5

    • 5级台阶:8

  • 递归思想(考虑最后一跳的情况)

    • 最后一跳(跳1级台阶):f(n-1)

    • 最后一跳(跳2级台阶):f(n-2)

    • 总跳法:f(n) : f(n-1) + f(n-2)

 

def f(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    
    return f(n-1) + f(n-2)

一个青蛙一次可以跳1级、2级、3级...n级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法

  • 递归思想(考虑最后一跳)

    • 最后跳1个台阶情况:f(n-1)

    • 最后跳2个台阶情况:f(n-2)

    • 最后跳3个台阶情况:f(n-3)

      ... ...

    • 最后跳n个台阶情况:f(0)

    • 总跳法

      • f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(0)

      • f(n-1) = f(n-2) + f(n-3) + ... ... + f(0)

      • f(n) = 2 * f(n-1)

def f(n):
    if n == 1:
        return 1
    
    return 2 * f(n-1)

 

给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。

1.返回第k小的节点值即可

2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1

3.保证n个节点的值不一样

  • 递归是函数自己调用自己。

  • 递归一定分为递推和回归两个过程。

  • 递归一定要有递归的出口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值