对数据结构的总体理解

参考资料
《大话数据结构》书籍下载地址

程序设计 = 数据结构+算法
(一)数据结构
1.基本概念和术语
(1)相似概念辨析

名称解释举例说明
数据计算机可操作的对象,能被计算机识别,并输入给计算机处理的符号集合不能只把数据理解为数
数据对象性质相似的数据元素组成的集合,是数据的子集。有相同特点的数据集合人都有姓名、性别生日等相同的数据项
数据元素组成数据的有一定意义的基本单位更具体更直观的数据,eg人类中的数据元素是人
数据项一个数据元素可以由若干数据项组成,数据项是数据不可分割的最小单元可以联想到结构体与结构体中元素的关系,C++中对象和成员函数的关系,eg人这个数据元素还有眼耳鼻喉这些数据项
数据结构相互之间存在一种或多种特定关系的数据元素的集合数据结构的本质数数据与数据之间的关系

2.数据结构的分类
数据结构本质是刻画数据与数据的关系,所以对数据元素的分类就是按照不同的关系进行分类。
(1)逻辑结构:有连接关系(线性结构一对一、树形结构一对多、图形结构多对多),无连接关系(集合结构)

结构名称概念解释
集合结构所有元素同属于一个集合以外,没有其他关系
线性结构数据元素之间是一对一的关系
树形结构数据元素之间存在一对多的层次关系
图形结构图形结构的数据元素是多对多的关系

(2)物理结构:连续存放在地址连续的存储单元中(数组),存放到任意存储单元中(链表)。
逻辑结构是面向问题,针对不同的实际问题需要有不同的选择。
物理结构是面向计算机的,针对不同存储中的资源和效率问题时需要进行细致的考虑。

结构名称概念解释
顺序存储结构把数据元素存放在地址连续的存储单元里,数据间的逻辑结构和物理关系是一致的
链式存储结构把数据存放在任意的存储单元里,存储关系不反应逻辑关系

在这里插入图片描述
3.结合应用的理解
数据结构中常用术语从逻辑和物理两个角度理解。
(1)数组
物理角度:不直接反映元素之间相互连接的关系,是在物理上顺序存储的容器。
array和vector的使用
(2)链表
物理角度:在内存中不连续分布。
链表的使用以及常见力扣题
链表比数组能够直观一点反应元素之间的相互关系,不过这种相互关系也只是限于相邻元素之间。
(3)哈希表
a.逻辑关系:一对一(发生碰撞就是为了解决多对一的问题)
b.物理结构:是unorder_map的实现方式,map容器中既有关键字,也有关键字对应的数值
数组:数组是一张特殊的哈希表,哈希表的关键字就是索引下标。
哈希表是数组的泛化,索引不仅是具体的数值,还有可以是其他各种字符。
用哈希表解决问题是时可以用数组,set,map来解决问题。
说明逻辑关系和物理结构很多时候是交叉的,同一个逻辑关系可以用不同的物理结构表示,不同的逻辑关系也可以使用同一种物理结构表示。
哈希表是一种数据与数据之间的组织关系
(4)二叉树
a.逻辑关系:元素之间是一对多的关系
b.物理结构:链式存储方式就用指针, 顺序存储的方式就是用数组。
具体的存储规则还可以细分,具体的选择取决于应用场景,选择的重点是如何反应数据与数据之间的逻辑关系。

//链式存储的定义,节点值和左右指针
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

用数组也可以存储二叉树:双亲表示法,孩子表示法,孩子兄弟表示法。
根据不同需要存储节点以及节点之间的关系。
遍历方式是从元素访问顺序的角度来说的,不要将其与存储方式弄混,在解决遍历方式时,二叉树的节点已经用链式存储的方式存储好了。
(5)栈和队列
a.逻辑关系:只允许对端处的元素进行操作
b.物理结构:既可以用线性结构存储,又可以用链式结构存储
线性结构:两栈共享空间用一个数组存储两个栈,两个栈增加元素就是两端点向中间延伸;
链式结构:栈只是栈顶来做插入和删除操作;
【第四章 栈与队列】——《大话数据结构》

对于栈和队列,需要重点学习的就是出入栈操作,就是增加和删除的操作。
栈本身不归类为容器,但是栈是以底层容器来完成所有功能的。栈的底层实现可以是vector、deque、list,栈归类为容器适配器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值