数据结构基本概念

文章来源  https://blog.csdn.net/zhangjiehuan/article/details/93381331

    数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组、结构体、联合、指针和链表等。

1. 基本概念

    数据:数据是信息的载体,能够被计算机识别、存储和加工处理。数据包括的类型很广泛,如基本的整数、实数等,还包括声音、视频、图形等非数值类型。

    数据元素:数据的基本单位,一个数据元素包含若干个数据项,数据项也叫字段、域、属性,数据元素也称为记录。

    数据对象:性质相同的数据元素的集合。

    数据结构:计算机中对数据的一种存储和组织方式。

2. 数据结构内容

   数据结构包含3个方面的内容:

  • 数据的逻辑结构:即数据元素之间的逻辑关系,可看做是从具体问题抽象出来的数学模型。
  • 数据的存储方式:数据元素及其逻辑关系在计算机存储器中的表现形式。
  • 数据的运算:对数据施加的操作。

2.1 举例    

    仅仅通过概念定义还是很难理解,下面举个例子

学生成绩
学号姓名数学物理化学
1001张三908984
1002李四928587
1003陈五839186
...............
1045王六888692

    下面用数据结构的语言来描述这些逻辑关系。

  • 对表中任意一个结点,直接前驱结点最多只有一个,直接前驱结点指与其相邻且在其前面的结点。
  • 对表中任意一个结点,直接后继结点最多只有一个,直接后继结点指与其相邻且在其后面的结点。
  • 表中只有第一个结点没有直接前驱,即开始结点。
  • 表中只有最后一个结点没有直接后继,即终端结点。

   这些结点关系即学生成绩表的逻辑关系。

    逻辑结构分为线性结构、树型结构、图形结构。

    然后再谈谈数据的存储结构,上文提到数据的存储结构是数据元素及其逻辑关系在计算机存储器中的表示形式。如顺序存储、链式存储、散列存储等。

    最后是数据的运算,对于上表,我们一般会进行如下操作:

  • 查找某位学生的成绩
  • 增加/删除一个学生信息
  • 修改某个学生的成绩
  • 计算平均成绩
  • ...

2.2 数据结构是一个有机的整体

    数据的逻辑结构、存储结构和运算是一个整体,单独去理解其中任何一个都是不全面的,因为:

  • 同一个逻辑结构可以有不同的存储结构
  • 同一种逻辑结构也可以有不同的数据运算集合

    即任何一个发生变化都会产生一个全新的数据结构,他们是有机的整体,缺一不可。

3. 数据结构的存储方式

    数据的存储结构一般包含以下4种:

  • 顺序存储方式:就是数据在连续的内存区域顺序存放,一般是数组的方式。
  • 链式存储方式:一般是链表的方式。
  • 索引存储方式:采用附加的索引表来存储结点信息。
  • 散列存储方式:根据节点的关键字直接计算出该结点的存储地址的存储方式。

4. 数据的类型

    数据的类型可分为以下两类:

  • 基本数据类型:其值不能再分解,如整形、浮点型等
  • 聚合数据类型:如结构体、数组等。

    此外,还有一种称为抽象数据类型(Abstract Data Type,ADT),指的是数据的组织及其相关的操作。   

ADT 抽象数据类型名

{
    数据对象:数据元素的集合

    基本操作

}

    抽象数据类型特征:

  • 数据抽象:强调实体本质特征、能够完成的功能以及对外接口
  • 数据封装:将实体外部特性和其内部实现细节分离

    可以把抽象数据类型看做是描述问题的模型,它独立于具体实现,ADT把数据和操作封装起来,用户程序只能通过ADT定义的接口访问数据,从而实现信息隐藏,比如C++里的类。

5. 常用数据结构

  • 数组(Array)
  • 栈(Stack)
  • 队列(Queue)
  • 链表(Link List)
  • 树(Tree)
  • 图(Graph)
  • 堆(Heap)
  • 散列表(HASH)

 

    参考资料

    《C/C++常用算法手册》

    《大话数据结构》

    《数据结构与算法分析》

 

更多文章,欢迎关注公众号~

                                                         

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在C++中,数据结构是指一种组织和存储数据的方式。在这段代码中,使用了结构体来定义一个节点(node),节点包含了两个整数变量x和y。结构体中还重载了小于号运算符,用于比较节点的大小。主函数中使用了优先队列(priority_queue)来存储节点,并按照节点的x值从大到小进行排序。然后通过遍历优先队列,输出节点的x和y值。\[1\] 引用\[2\]:在C++中,vector是一种动态数组容器。它可以根据需要自动调整大小,并且支持多种构造函数。例如,可以使用默认构造函数创建一个空的vector,也可以使用拷贝构造函数将一个vector的元素拷贝给另一个vector。另外,还可以使用带有两个迭代器参数的构造函数,将一个区间内的元素拷贝给vector,或者使用带有一个整数参数和一个元素参数的构造函数,将指定数量的相同元素拷贝给vector。\[2\] 引用\[3\]:这段代码是一个关于图的遍历的例题。首先,根据输入的节点数量n和边的数量m,使用并查集来判断图是否联通。然后,统计图中奇点的数量,如果奇点的数量为0或者2,则存在欧拉回路。最后,根据判断结果输出相应的结果。\[3\] 综上所述,C++中的数据结构基本概念包括使用结构体来定义节点,使用优先队列来排序节点,使用vector来存储动态数组,以及使用并查集来判断图的连通性和欧拉回路的存在性。 #### 引用[.reference_title] - *1* *2* [C++之STL基础概念、容器、数据结构](https://blog.csdn.net/Pxx520Tangtian/article/details/126764518)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v4^insert_chatgpt"}} ] [.reference_item] - *3* [c++数据结构-图(详解附算法代码,一看就懂)](https://blog.csdn.net/m0_64036070/article/details/128737229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值