数据结构与算法

数据结构的基本概念

数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。

数据结构包括逻辑结构和存储结构两个层次

逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。、

物理结构又叫存储结构,分为两种,顺序存储结构、链式存储结构。

逻辑结构

集合结构:数据元素同属一个集合,单个数据元素之间没有任何关系。

线性结构:类似于线性关系,线性结构中的数据元素之间是一对一的关系。

树形结构:树形结构中的数据元素之间存在一对多的关系。(各元素及元素关系所组成图形头似于树状图)。

图形结构:数据元素之间是多对多的关系。

存储结构

顺序存储结构是把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是

致的。之前学习的数组就是一种顺序存储结构。

链式存储结构:是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以
是不连续的。

数据类型和抽象数据类型

a、数据类型:一个值的集合及定义在这个值集上的一组操作的总称。
一般包括整型、实型、字符型等原子类型外,还有数组、结构体和指针等结构类型。

b、抽象数据类型

抽象数据类型(Abstract Data Type,ADT),类似C语言中的结构体以及C++语言中的类。

通俗的讲,抽象数据类型,泛指除基本数据类型以外的数据类型。

算法 (algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外,一个算法还具有下列5个重要特性:

1.有穷性:一个算法必须总是(对合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。

2.确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,算法只有惟一的一条执行路径,即对于相同的输入只能得出相同的输出。

3.可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的

4.输入:一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。

5.输出:一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量。

算法+数据结构=程序

算法设计的要求:

1.正确性
2.可读性
3.健壮性
4.高效性与低存储量

时间复杂度指算法中各语句执行时间的总和

python 复制代码
for (i=1;i<=n;++i)//执行n+1次
    for (j=1;j<=n;++j)//执行n(n+1)次
        x=x+1;//执行n2次
语句执行次数:f(n)=2n^2+2n+1
算法的执行时间:T(n)=O(n^2)

1.最好时间复杂度,指的是算法计算量可能达到的最小值。

2.最坏时间复杂度,指的是算法计算量可能达到的最大值。

3.平均时间复杂度,是指算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值。

算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关。如某些排序的算法,其执行时间与待排序记录的初始状态有关为此,有时会对算法有最好、最坏以及平均时间复杂度的评价。

空间复杂度只需要分析辅助变量所占的额外空间。

空间复杂度:S(n)=O(f(n))

如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)。

总结

简述下列概念:数据、抽象数据类型、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构。
数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

线性表的定义

由n(n>=20)个数据特性相同的元素构成的有限序列称为线性表,(n=0)的时候被称为空表。

一个数据元素可以是简单的一个数据,一个符号,也可以是复杂的若干个数据项的组合

线性表的顺序存储又被称为顺序表。

顺序存储表示:用一组地址连续的存储单元依次存储线性表的数据元素的方式,具有顺序存储结构的特点(数据间的逻辑关系和物理关系是一致的)

假设线性表L存储的起始位置为 LOC(A),sizeof(ElemType)是每个数据元素所占用存储空间的大小,则表L所对应的顺序存储如下图:

相关推荐
XiaoLeisj19 分钟前
【递归,搜索与回溯算法 & 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)
数据结构·算法·leetcode·决策树·深度优先·剪枝
Jackey_Song_Odd1 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
乐之者v2 小时前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A3 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
️南城丶北离4 小时前
[数据结构]图——C++描述
数据结构··最小生成树·最短路径·aov网络·aoe网络
✿ ༺ ོIT技术༻4 小时前
C++11:新特性&右值引用&移动语义
linux·数据结构·c++
菜鸡中的奋斗鸡→挣扎鸡11 小时前
滑动窗口 + 算法复习
数据结构·算法
axxy200012 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
Uu_05kkq13 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
1nullptr15 小时前
三次翻转实现数组元素的旋转
数据结构