数据结构基本概念

前言

计算机解决问题的步骤:

  • 从具体问题中抽象出数学模型
  • 设计一个解决这个模型的算法
  • 编写程序,进行测试、调整得到最终结果

寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些对象之间的关系,然后用数学语言加以描述。

数据结构三要素:逻辑结构、存储结构、数据运算

算法:是对特定问题求解步骤的描述

基本概念

数据
数据(data)是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号集合。是计算机程序加工的“原料”。

数据元素
数据元素是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

程序=数据结构+算法

数据对象
数据对象是性质相同的数据元素的集合,是数据的一个子集。

数据类型

数据类型是一个值的集合和定义在这个集合上的一组操作的总称。

  • 原子类型:原子类型的值是不可分解的。例如基本类型、指针类型和空类型。
  • 结构类型:结构类型的值是由若干成分按某种结构组成的,是可分解的。

抽象数据类型是一个数学模型及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)表示

数据类型:数据对象集、数据集合相关联的操作集
抽象:描述数据类型的方法不依赖于具体实现。与存放数据的机器无关,与数据存储的物理结构无关,与实现操作的算法和编程语言均无关
只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”的问题

数据对象必定与一系列加在其上的操作相关联,完成这些操作所用的方法就是算法

数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据元素不是孤立存在的,它们之间的关系称为结构。

  • 逻辑结构:是指数据元素之间的逻辑关系。它与数据的存储无关,是独立于计算机的。
    线性结构:线性表、栈、队列
    非线性结构:集合、图状结构或网状结构、树形结构

  • 存储结构:数据结构在计算机中的表示(又称映像)称为数据的物理结构,又称存储结构。它包括数据元素的表示和关系的表示。在计算机中表示信息的最小单位是二进制数的一位,叫做位(bit)。在计算机中,我们可以用一个由若干位组合起来形成的一个位串表示-一个数据元素(如用一个字长的位串表示一个整数,用8位二进制数表示一个字符等),通常称这个位串为元素D(element)或结点(node)。当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据域(data field)。 因此,元素或结点可看成是数据元素在计算机中的映像。
    数据的存储结构是用计算机语言实现的逻辑结构,它依赖于计算机语言。
    顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的单元中,元素之间的关系由存储单元的邻接关系来体现。
    链式存储:用指针表示元素之间的逻辑关系,能充分利用所有存储单元。
    索引存储:建立附加的索引表。
    散列存储:哈希存储。

  • 数据运算
    施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体步骤。

数据结构的形式定义:Data Structure = (D,S)。其中:D是数据元素的有限集,S是D上关系的有限集。

数据的逻辑结构和存储结构是密不可分的两个方面,算法的设计取决于所选定的逻辑结构,算法的实现依赖于所采用的存储结构。

在探讨一种数据结构时:
①定义逻辑结构(数据元素之间的关系)
②定义数据的运算(针对现实需求,应该对这种逻辑结构进行什么样的运算)
③确定某种存储结构,实现数据结构,并实现一些对数据结构的基本运算

算法和算法分析

算法:是对特定问题求解步骤的描述

算法的五个特性:有穷性、确定性、可行性、输入、输出

算法是有穷的,程序可以是无穷的

算法设计的要求:正确、可读、健壮、高效率与低存储需求

正确的四个层次:

  1. 程序不含语法错误
  2. 程序对于一般的输入数据能够得出满足规格说明的要求的结果
  3. 程序对于精心挑选的典型、苛刻的输入数据够得出满足规格说明的要求的结果
  4. 程序对于一切合法的输入数据够得出满足规格说明的要求的结果

解决问题方法的效率,与数据的组织方式、空间利用效率、算法的巧妙程度有关。

平均情况复杂度
最坏情况复杂度

时间复杂度

T(n) 根据算法写成的程序在执行时耗费时间的长度。

影响因素:

  • 算法策略
  • 问题规模
  • 书写程序的语言(语言越高级,效率越低)
  • 编译程序产生的机器代码的质量
  • 机器执行指令的速度

事先分析估算法

渐进表示法,T(n)=O(f(n))
算法的执行时间与基本操作的重复的执行次数成正比

事后统计法

有些算法是不能事后统计的

用时钟打点计时得到运行时间

#include<stdio.h>
#include<time.h>
#include<math.h>
#define MAXK 1e7 /*被测函数最大重复调用次数*/
···
int main (){
start = clock () ;
for ( i=0; i<MAXK; i++ ) /* 重复调用函数以获得充分多的时钟打点数*/
f1 (MAXN-1,a,1.1) ;
stop = c1ock () ;
duration = ( (double) (stop - start)) /CLK_ TCK/MAXK; /*计算函数单次运行的时间*/
printf ("ticks1 = 8f\n"(doub1e) (stop - start)) ;
printf ("duration1 = 86.2e\n", duration) ;
...
return 0;
}

空间复杂度

S(n) 根据算法写成的程序在执行时占用存储单元的长度

其中n为问题的规模(或大小)。一个上机执行的程序除了需要存储空间来寄存本身所用指令、常数、变量和输入数据外,也需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输人数据所占空间只取决于问题本身,和算法无关,则只需要分析除输人和程序之外的额外空间,否则应同时考虑输人本身所需空间(和输人数据的表示形式有关)。若额外空间相对于输入数据量来说是常数,则称此算法为原地工作。又如果所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

孤影墨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值