zoukankan      html  css  js  c++  java
  • [算法] 数据结构基本概念

     一、基本概念

    1. 什么是线性结构和非线性结构,举例?线性结构是一个有序数据元素的集合,元素之间一对一关系,即除了第一个和最后一个元素外,其他元素首尾相接,如线性表、栈、队列、数组;非线性结构每个元素可能与零或多个其他元素发生关系,如二维数组、树、图等
    2. 数据存储结构分类?顺序(随机存取)、链式(顺序存取)、索引、散列
    3. 线性表的存储结构有哪两种,分别是如何存取的?顺序存储结构,随机存取;链式存储结构,顺序存取
    4. 什么是广义表?广义表的表头表尾是什么?又称列表(Lists),是一种非线性结构,表中的元素可以有自己的结构;表中第一个元素为表头,其他元素组成的表为表尾
    5. 单链表中增加一个头结点的目的是?使得空链表与非空链表的处理一致,方便了链表开始结点的插入和删除操作(与头指针区分,头指针指向链表第一个结点,无论有无头结点)
    6. 什么是静态链表,在c中如何实现?用数组描述的链表;结构体数组,结构体变量包括数据和游标,游标指向下一个元素在数组中的位置
    7. 什么是跳表,解决了什么问题?多级索引链表,可向有序链表中快速插入新结点(时间O(log(N)),空间O(N))
    8. 栈与队列的区别?栈的插入和删除在栈顶,需要一个指针;队列的插入在队尾,删除在队头,需要两个指针
    9. 循环队列解决了什么问题?解决了队列用数组存储时的“假溢出”现象
    10. 树的度指什么?结点拥有的子树个数称为结点的度,树中各结点的度的最大值为树的度
    11. 什么是二叉树,和普通树的区别,用来解决什么问题?每个节点最多有两个子树的树。普通树的结点个数至少为1,二叉树可以为0;普通树结点最大分支无限制,二叉树最多为2;普通树结点无左右之分,二叉树有
    12. 什么是树的遍历,二叉树有哪几种遍历方式?访问树的每个节点,且每个节点仅被访问一次。先序遍历、中序遍历、后序遍历,中间节点被访问的次序;层序遍历
    13. 二叉树如何存储?数组存储(适合不需修改的完全二叉树);链表存储(每个结点由数据和左右指针组成)
    14. 一般树如何转换为对应的二叉树?所有兄弟结点之间加连线,去掉与除第一个孩子外其他孩子的连线
    15. 什么是满二叉树(完美二叉树)?深度为k,有2^k-1个节点的二叉树
    16. 什么是完全二叉树,解决了什么问题?是一种特殊的满二叉树。每个节点都与相应满二叉树的节点对应,但总节点数可能少于相应满二叉树(叶结点只能出现在最下层和次下层,且最下层的叶结点集中在树的左部)
    17. 完全二叉树有什么性质?有N个结点的完全二叉树的深度为[log2N]+1;第i层最大结点数为2(i-1);深度为k的完全二叉树最大总结点数为2^k-1;对任何非空二叉树,n0=n2+1
    18. 什么是二叉查找(搜索)树(BST)?左子树所有键值小于根节点键值,右子树所有键值大于根节点键值,左右子树都是BST
    19. BST如何查找结点?比较要查找元素和根结点关系,若小于则在左子树查找,若大于则在右子树查找,若等于返回根节点指针
    20. BST如何插入结点?在查找终止的地方插入
    21. 平衡二叉树(AVL)的特点,解决了什么问题?是一种特殊的二叉查找树,任意节点的两个子树的高度最大相差1。插入、查找、删除操作均可在O(logN)时间内完成
    22. AVL树的平衡因子(BF)是什么,有什么用?每个结点左右子树的高度差,只能在-1,0,1中取值,是平衡的量化标准,用于插入结点时的调整
    23. 向AVL树中插入新结点时如何调整?每插入一个结点后,重新计算各结点的平衡因子,若有不平衡的结点则对树进行相应调整(左单旋、右单旋、左右双旋、右左双旋)
    24. 什么是堆,如何实现,有何应用?一种特殊的完全二叉树,最小堆满足所有父结点都比子节点小,最大堆反之。用数组存储。堆排序、优先队列
    25. 最小堆如何实现删除最小数并添加一个新数?先删除根结点,再把要插入的结点放在根结点,比较其与叶结点的关系,调整到合适位置
    26. 如何用O(N)时间建立一个堆?
    27. 堆排序的思路(从小到大)?先建立最小堆,然后每次删除顶部元素并将其放到新数组中;或先建立最大堆,然后每次交换头尾元素并将堆的大小-1
    28. 最小堆如何实现添加一个新树?把新数放在最后,再与其根节点比较,调整到合适位置
    29. 什么是哈夫曼树(最优二叉树),如何实现,有何应用?带权路径长度最小的二叉树;节省字符串编码空间、case总判定次数最小
    30. 如何存储图?邻接矩阵、邻接表
    31. 什么是连通图?结点i、j间有路径连接,则称结点i、j连通,任意两结点连通的图称为连通图
    32. 图的遍历方法,如何实现?深度优先(DFS)——栈实现;广度优先(BFS)——队列实现
    33. 什么是生成树,最小生成树?联通所有结点且不产生回路的所有子图;对于带权图,权值最小的生成树称为最小生成树
    34. STL容器list、vector、map、set的底层是什么?list——双向链表;vector——数组;map、set——红黑树

    二、问题

    1. 完全二叉树一定是平衡二叉树(F)平衡二叉树是二叉查找树,结点需满足大小关系
    2. 平衡二叉树一定是完全二叉树(F)完全二叉树最下层叶结点只能在左边(完全二叉树侧重存储方便,平衡二叉树侧重查找方便)

     

  • 相关阅读:
    Android Studio中的Java控制台中出现乱码问题?
    博客第二天——头插法建立单链表
    博客志第一天——判断一个整数N是否是完全平方数?
    绝对定位篇
    JavaScript 事件循环
    var与let变量for遍历的问题
    获取url中参数值
    Js不用for,forEach,map等循环实现九九乘法表
    前端常见浏览器兼容性问题
    js常见面试题
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10726919.html
Copyright © 2011-2022 走看看