数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

阅读指导:
       本文内容丰富,涵盖广泛,读者朋友们可以根据目录指引,直接跳跃至您感兴趣的章节开始品读。此外,作者正在积极创作后续篇章,如果您对本篇文章有所喜爱,不妨点击关注,以便第一时间获取最新作品动态。
       现在,让我们开始正文的旅程吧。希望您能细细品味每一个字句,如果您在任何地方发现有任何不妥或欠缺之处,请在评论区不吝赐教。作者将虚心接受您的宝贵意见,并努力进行改进。期待您的宝贵反馈!
下一篇文章
数据结构的概念大合集02(线性表)

1、数据结构基础的定义

名称具体概念
数据描述客观事物的数和字符的集合,能被计算机程序处理的符号总称
数据元素数据的基本单位,又称元素、结点、顶点、记录
数据项是具有独立含义的数据最小单位,是构成数据元素的最小单位,又称字段、域
数据对象性质相同的数据元素的集合,是数据的一个子集
数据结构是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构
数据类型是一个值的集合和定义在这个值集上的一组操作的总称
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作

请添加图片描述

2、数据结构

2.1 数据元素之间关系的集合

数据的基本结构关系
集合属于同一个集合,没有什么具体关系
线性结构一对一
树形结构一对多
图形(网状)结构多对多

2.2数据结构的三要素

2.2.1数据的逻辑结构

从逻辑上表示数据,与具体的存储无关

数据的逻辑结构
线性结构
非线性结构
线性表
队列
集合

2.2.2数据的存储(物理)结构

指的是数据的逻辑结构在计算机的具体实现,依赖于计算机语言

数据的存储结构
顺序存储
链式存储
索引存储
散列存储 哈希存储

2.2.3数据的运算

数据的运算包括运算定义运算实现

  • 运算定义:对于运算功能的描述,是抽象的,是基于逻辑关系的
  • 运算实现:是程序员完成运算的实现算法,是具体的,是基于存储结构的

3、数据类型

指的是一组性质相同的值的集合和定义在此集合上的一组操作的总称
比如C语言中的int、float等。

4、抽象数据类型类型(ADT)

逻辑结构+抽象运算
定义抽象数据类型:
ADT 抽象数据类型名
{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}

5、算法及其描述

5.1算法的5个特性

又穷性;确定性;可行性;有输入;有输出

5.2算法设计的目标

正确性;可使用性;可读性;健壮性;高效率与低存储量需求

5.3算法的时间复杂度

主要衡量的是一个算法的运行速度。为了描述一个算法的时间复杂度,人们发明了一个通用的表示方法:

「 大O符号表示法 」,即 T(n) = O(f(n))

我们先来看个例子:

for(i=1; i<=n; ++i) //第一行
{
   j = i;	//第三行
   j++;		//第四行
}

在大O符号表示法中,f(n)表示每行代码的执行次数之和;

所以上述代码中,第一行执行一次,第三行执行n次,第四行执行n次,整段代码执行(1+2n)次,即f(n)=1+2n;

取波极限,当n无穷大时,则令f(n)=n(注意不是2n,这是简化的写法);

于是此时T(n) = O(n);

为什么可以大O表示法可以简写呢,主要是因为这个表达式主要是表示代码执行时间的增长的变化趋势的,所以当n无穷大时,常数1和倍数2的意义就不是很大了。所以在采取大O表示法的时候,我们常取其指数最大的一项来表示,同时省略其他项和指数最大项的倍数。

常见的时间复杂度量级有:

  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 平方阶O(n²)
  • 立方阶O(n³)
  • K次方阶O(n^k)
  • 指数阶(2^n)

上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。

5.3.1时间复杂度的求和、求积定理

T1(n) = O(f(n))
T2(n) = O(g(n))
求和:T1(n) + T2(n) = O( Max ( f(n),g(n) ) )
求积:T1(n) × T2(n) = O( f(n) × g(n) )

5.4算法的空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。与上面的时间复杂度一样,也采用大O表示法。
即S(n) = O( g(n) )
举例:

  1. 空间复杂度O(1)
    如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
    举例:
int i = 1;
int j = 2;
++i;
j++;
int m = i + j;

代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)

  1. 空间复杂度O(n)
int fun(int n)
{
	return n < 2 ? n : fun(n - 1)*n;
}

阶乘递归函数会依次调用fun(N),fun(N-1),…,fun(2),fun(1),开辟了n个空间,所以空间复杂度为O(n) 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值