二、数据结构



前言

数据结构如同房子的框架。它为数据的有序组织提供了组织架构,算法在此基础上蓬勃发展

  • 学习算法之前,我们需要先了解有哪些数据结构,并且知道他们之间的关系。

一、数据结构分类

  • 常见的数据结构包括数组、链表、栈、队列、树、堆、图还有哈希表。
  • 我们可以从“逻辑结构”和“物理结构”两个维度进行分类。

1. 逻辑结构:线性与非线性

逻辑结构可分为“线性”和“非线性”两大类。

  • 线性结构比较直观,指数据在逻辑关系上呈线性排列
  • 非线性结构则相反,呈非线性排列。
线性数据结构非线性数据结构
数组、链表、栈、队列树、堆、图

哈希表还要特殊一点,它即属于线性结构也属于非线性结构

非线性数据结构可以进一步划分为树形结构和网状结构。

  • 树形结构:树、堆、哈希表,元素之间是一对多的关系。
  • 网状结构:图,元素之间是多对多的关系。

2. 物理结构:连续与分散

  • 当算法程序运行时,正在处理的数据主要存储在内存中。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大小的数据。
  • 系统通过内存地址来访问目标位置的数据。计算机根据特定规则为表格中的每个单元格分配编号,确保每个内存空间都有唯一的内存地址。有了这些地址,程序便可以访问内存中的数据。
  • 内存是所有程序的共享资源,当某块内存被某个程序占用时,则通常无法被其他程序同时使用了。因此在数据结构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。
  • 物理结构反映了数据在计算机内存中的存储方式,分为
    : 连续空间存储(数组)
    : 分散空间存储(链表)
  • 物理结构从底层决定了数据的访问、更新、增删等操作方法,两种物理结构在时间效率和空间效率方面呈现出互补的特点。

问题1

  • 为什么哈希表同时包含线性数据结构和非线性数据结构?
    • 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。
    • 从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵树。因此,哈希表可能同时包含线性数据结构(数组、链表)和非线性数据结构(树)。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值