【C/C++】论数据结构的上层建筑和底层基础

论数据结构的上层建筑和底层基础

1 上层建筑和底层基础解释

上层建筑

  • hash table
  • stack
  • queue
  • heap
  • tree
  • graph

底层基础

  • 数组
  • 链表

分类原因

多种多样的数据结构都脱离不了底层基本存储结构,即数组和链表。数据结构其实就是基于数组或链表,增加不同的API接口,实现不同的特性。

2 详细解释

queue & stack

这两种数据结构既可以使用数组实现,又可以用链表实现。

  • 使用数组实现时,需要考虑扩容/缩容等问题;
  • 使用链表实现时,需要考虑内存空间占用等问题;

graph

  • 邻接表
    1 基于链表实现;
    2 图比较稀疏情况下优先;
    3 节省空间,但效率相对低;
  • 邻接矩阵
    1 基于二维数组实现;
    2 判断连通性快;
    3 效率高但空间占用多;

hash table

实现原理:通过hash function将key映射到一个数组中。
解决hash冲突的方法:

  • 拉链法
    使用链表特性,操作简单,但是,需要额外空间存储指针;
  • 线性探查法
    使用数组特性,方便连续寻址,不需要额外空间,但是,操作复杂;

tree

  • 基于数组
    基于数组实现就是堆,堆是一完全二叉树;
    不需要节点指针,操作相对简单
  • 基于链表
    即常见的树,不一定是完全二叉树;

延申:二叉搜索树/AVL树/红黑树/区间树/B树/…

3 底层基础比较

数组

紧凑连续存储 -> 随机访问,快速定位,节约空间
连续存储 -> 内存空间须一次性分配足,扩容时需要重新申请,再复制,增删操作复杂度O(N)

链表

元素不连续,依赖指针指向下一节点 -> 无扩容问题,耗费内存空间更多
非连续存储 -> 增删操作复杂度O(1),但是无法随机访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值