【整理】数据结构与算法【概念】

      数据结构与算法概念性相对比较多,起步靠记忆,但在理解及通过代码实现后,又觉得概念能让人更容易理清一些繁杂问题的思路,时而温故还是有所得。
  
1 数据结构的概念和分类
 1.1 基本概念
  在计算机中,数据结构指计算中描述和存储数据的方式,主要描述数据元素之间的逻辑关系以及在计算机中的存储形式
  × 通常情况下,数据结构的选择会影响到程序的运行效率(时间复杂度)以及程序的存储效率(空间复杂度)
  × 计算机程序 = 数据结构 + 算法

 1.2 基本分类/层次结构
  (1) 逻辑结构  -  抽象层
   主要描述数据元素之间的逻辑关系
  (2) 物理结构  -  结构层
   主要描述数据元素之间的位置关系以及存储形式
  (3) 运算结构  -  实现层
   主要描述如何实现该结构以及该结构的基本操作
 
 1.3 逻辑结构的分类
  (1) 集合结构
   主要描述所有的数据元素都属于一个总体,不强调元素之间的关系
  (2) 线性结构
   主要描述所有的数据元素之间存在一对一的前后关系,除了第一个元素外,每个元素都有一个前趋元素,除了最后一个元素外,每个元素都有一个后继元素
  (3) 树型结构
   主要描述元素之间存在一对多的关系,其中起始元素叫做根元素,末尾/顶端元素叫做叶元素,除了根元素之外,每个元素都有且只有一个前驱元素,除了叶子之外,每个元素都可以有多个后继元素
  (4) 网状结构
   主要描述数据元素之间存在多对多的交叉关系,也叫做图形结构。每个元素都可以有多个前趋元素和多个后继元素  
 
 1.4 物理结构的分类
  (1) 顺序存储结构
   顺序存储结构就是指使用一组连续的存储单元依次存储逻辑上相邻的多个元素
   × 如果每个元素的数据类型相同,则存储每一个数据元素的存储空间也相同
   × 使用C语言中的数组来加以描述
  
   优点:
     a. 节省存储空间,不需要申请额外的存储空间来表达数据元素之间的逻辑关系,只需要存储数据本身的空间即可
     b. 支持下标访问,实现随机访问
   缺点:
     a. 申请存储空间需要指定明确的大小,可能不够也可能浪费存储空间
     b. 顺序存储结构要求必须是连续的存储空间,所以存储空间的利用率比较低
     c. 在顺序存储结构中插入/删除元素时,可能需要移动大量的元素  (数组名是常量,不可改变)

  (2) 链式存储结构
   链式存储结构就是指使一组不连续的存储单元依次存放各个元素。也就是说不要求逻辑上相邻的元素在物理位置上也相邻
   × 链式存储结构中将每个元素在彼此独立的存储单元,该存储单元称为节点。但是为了让这些节点之间有联系,则需要在每一个节点中增加一个指针,该指针用于记录下一个节点的地址,于是所有的节点就被连接起来了
   × 绝大多数编程语言(c语言)中并没有提供对应的数据类型来描述链式存储结构,一般都需要搬运编码实现

   优点:
     a. 申请存储空间时不需要一次指定大小,可以随时使用随时申请
     b.  不需要影评连续的存储空间,也就是说存储空间的利用率比较高
     c. 插入/删除元素比较方便,不需要移动大量的元素
   缺点:
     a. 虽然克服顺序存储结构预知元素个数的缺点,但是每一个节点中需要增加指针来记录下一个节点地址,因此总体存储
      空间的开销会比较大
     b. 不支持下标访问,也不能实现随机访问

 1.5 逻辑结构和物理结构的关系
          每种逻辑结构采用何种物理结构来实现并没有明确规定,甚至某些特殊情况下,同一种逻辑结构可能需要多种物理结构配合
   来实现。

 1.6  运算结构
  (1) 创建 与 销毁
    分配资源实现创建  =>  建立数据结构  =>  销毁占用资源
  (2) 插入  和  删除
    向数据结构中增加元素 和 从数据结构中 减少元素
  (3) 修改 和 查找 以及 排序
    修改元素的值 使用查找算法 和  排序算法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值