数据结构知识点点点点点

  • std::stack<Type>
    std::stack<int> s1; //int栈
    std::stack<int> s2;
    int num,value;
    s1.push(10); //入栈
    s1.push(11);
    s1.pop(); //出栈
    s1.swap(s2); //交换栈
    num = s2.size(); //获取栈大小
    value = s2.top(); //获取栈顶数据

 

  • 哈希、散列函数

键值转换数组下标的函数

  • 哈希碰撞 / 冲突

开链表法、再散列法

 

  • C++ Map与HashMap

c++ 标准库的std::map内部使用红黑树进行排序,增加、查找的时间复杂度 O(logN);

c++ 标准库的hashmap—std::unordered_map,增加、查找的时间复杂度 O(1)。

 

  • STL容器

       顺序容器:vector,list,deque , string,stack( 适配器类), queue( 适配器类), priority queues( 适配器类)

       关联容器:set, multiset,map,multimap, bitset,hash_set, hash_map, hash_multiset, hash_multimap       

 

  • 红黑树

一种自平衡的二叉查找树(BST),通过定义一些性质,将任意节点的左右子树高度差控制在规定范围内,以达到平衡状态,避免二叉树退化成单链表的情况。确保从根节点到叶节点的最长路径不超过最短路径的两倍。

红黑树的两大操作:recolor+rotation

参考:https://zhuanlan.zhihu.com/p/79980618

 

  • 平衡二叉树(AVL树)

       性质:可以是空树;若不是空树,任何一个节点的左子树与右子树都是平衡二叉树,且高度差的绝对值不能超过1。

       局限性:AVL树是一种严格的平衡二叉树,执行插入或删除操作,只要不满足上面的条件,就要通过旋转来保持平衡, 而旋转是非常耗时的,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况。

       假设深度为n的平衡二叉树至少有F(n)个节点,则F(n)=F(n-1)+F(n-2)+1。

 

  • 数据结构——堆

可看成平衡二叉树,与存储结构的堆没关系;

最大堆/大顶堆:每个结点的值都大于或等于其左右子结点的值,最大值在顶节点

最小堆/小顶堆:每个结点的值都小于或等于其左右子结点的值,最小值在顶节点

 

  • 链表插入节点

单向链表所能获取的信息只有头部节点,尾部插入节点,需遍历链表,找到后继指针为空的节点,然后将指针指向代插入节点。

若是插入到某一位置或某一值后,同样需进行遍历操作。

 

  • 深度优先、广度优先的遍历方法

DFS:进栈、退栈,一搜到底

BFS:入队、出队,步步为营

深度优先:递归;利用栈数据结构stack(先进后出)循环实现

广度优先:无法使用递归,利用队列数据结构queue(先进先出)循环实现

 

  • 带头链表与不带头链表

带头节点:head -> p1 -> p2 -> p3,能够快速的定位链表第一个节点

不带头节点:p1 -> p2 -> p3,对于第一个节点的操作与其他节点不一样,需特殊处理

带头结点的单链表,初始时返回的是指向头结点的指针,需要使用二维指针(指向指针的指针)

 

  • 单链表反转

https://zhuanlan.zhihu.com/p/102908327

 

  • 二叉搜索树

左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。

 

 

  • 搜索二维矩阵

 

  • 判断二叉树是否对称

 

  • 由数组构建二叉平衡树/二叉搜索树

 

  • 二叉树最大路径

 

 

 

待续。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值