数据结构

第一章 绪论

数据结构基本概念
在这里插入图片描述

什么是数据?

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

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

数据结构、数据对象:
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

数据结构的三要素
在这里插入图片描述
逻辑结构——数据元素之间的逻辑关系是什么?
在这里插入图片描述
集合:各个元素同属一个集合,别无其他关系。
线性结构:数据元素之间是一对一关系。除了第一个元素,所有元素都有唯一前驱;除了最后一个元素,所有元素都有唯一后继。
树形结构:数据元素之间是一对多关系。
图结构:数据元素之间是多对多的关系。

数据的物理结构(存储结构)——各个数据元素在内存中如何存储
在这里插入图片描述
顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
链式存储:逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
索引存储: 在存储元素信息的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是(关键字,地址)。
散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储。

注意:
1.若采用循序村相互,则各个数据元素在物理上必须是连续的;若采用非顺序存储,则各个数据元素在物理上可以是离散的。
2.数据的存储结构会影响存储空间分配的方便程度。
3.数据的存储结构会影响对数据运算的速度。

数据的运算——施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现针对存储结构的,指出运算的具体操作步骤。
逻辑结构——心爱星结构(队列)
结合现实需求定义队列这种逻辑结构的运算:
1.队头元素出队;
2.新元素入队;
3.输出队列长度;

数据类型、抽象数据类型
数据类型是一个值的集合和定义在此集合上的一组操作的总称。
1、原子类型:其值不可再分的数据类型。
2、结构类型:其值可以再分解为若干成分(分量)的数据类型。
抽象数据类型(ADT)是抽象数据组织及与之相关的操作。
在这里插入图片描述
算法的基本概念
在这里插入图片描述

程序=数据结构+算法

算法的特性
有穷性:一个算法必须总在执行有穷步后结束,且每一步都可在有穷时间内完成。
注:算法必须是有穷的,而程序是无穷的。
确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
好算法的特质
1.正确性:算法应能够正确地解决求解问题。
2.可读性:算法应具有良好的可读性,以帮助人们理解。
3.健壮性:输入非法数据,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
4.高效率与低存储量需求(执行速度快,时间复杂度低)

在这里插入图片描述
算法的效率度量:时间复杂度、空间复杂度

算法时间复杂度
事前预估算法时间开销T(n)与问题规模n的关系(T表示‘time’)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算法空间复杂度
空间复杂度=递归调用的深度
在这里插入图片描述

第二章 线性表

2.1 线性表的定义和基本操作

2.1.1 线性表的定义

线性表是具有相同数据类型的 n(n>= 0)个数据元素的有限序列。其中 n 为 表长,当 n = 0时,该线性表是一个空表。若用 L 命名线性表,则其一般表示如下:
L = ( a1 , a2 , a3 , … , a(i) , a( i + 1) , … , a(n) )

其中,a1 是唯一的 “ 第一个 ” 数据元素,又称为表头元素;a(n) 是唯一的 “ 最后一个 ” 数据元素,又称为表尾元素。除了第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外 ,每个元素 有且仅有一个直接后继。以上就是线性表的逻辑特性,这种线性表有序的逻辑结构正是线性表名字的由来。
一个数据结构的基本操作是指其最核心、最基本的操作。其他复杂的操作可以通过调用其基本

2.1.12 线性表的基本操作

一个数据结构的基本操作是指其最核心、最基本的操作。其他复杂的操作可以通过调用其基本操作来实现。线性表的主要操作如下:

InitList(&L) : 初始化表。构造一个空的线性表。
DestroyList( &L ) : 销毁操作。销毁线性表,并释放线性表 L 所占用的内存空间。
ListInsert( &L , i , e ) :插入操作。在表 L 中的第 i 个位置插入指定元素 e。
ListDelete( &L , i , &e) : 删除操作。删除表 L 中第 i 个位置的元素,并用 e 返回删除元素的值。
LocateElem( L , e ) : 按值查找操作。在表 L 中 查找具有给定关键字值的元素。
GetElem( L , i ) : 按位查找操作。获取表 L 中第 i 个位置的元素的值
Length( L ) : 求表长。返回线性表 L 的长度,即 L 中数据元素的个数。
PrintList( L ) : 输出操作。按前后顺序输出线性表 L 的所有元素的值。
Empty( L ) : 判空操作。若 L 为空表,则返回 true ,否则返回 false 。
Tips:
1.对数据的操作(分析思路)——创销、增删改查
2.C语言函数的定义——<返回值类型> 函数名(<参数1类型>参数1,<参数2类型>参数2,…)
3.实际开发中,可根据实际需求定义其他的基本操作
4.函数名和参数的形式、命名都可改变
5.什么时候要传入参数的引用“&”——对参数的修改结果需要“带回来”

在这里插入图片描述

2.2 线性表的顺序表示

2.2.1 顺序表的定义

顺序表——用顺序存储的方式实现线性表顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

2.2.2 顺序表的基本操作

2.3 线性表的链式表示

2.3.1 单链表的定义

2.3.2 单链表上的基本操作的实现

2.3.3 双链表

2.3.4 循环链表

2.3.5 静态链表

2.3.6 顺序表和链表的比较

第三章 栈与队列

3.1 栈

3.1.1 栈的基本概念

3.1.2 栈的顺序存储结构

3.1.3 栈的链式存储结构

3.2 队列

3.2.1 队列的基本概念

3.2.2 队列的顺序存储结构

3.2.3 队列的链式存储结构

3.2.4 双端队列

3.3 栈和队列的应用

3.3.1 栈在括号匹配中的作用

3.3.2 栈在表达式求值中的作用

3.3.3 栈在递归中的应用

3.3.4 队列在层次遍历中的应用

3.3.5 队列在计算机系统中的应用

第四章 树

第五章 图

第六章 查找

6.1 查找的基本概念

6.2 顺序查找和折半查找

6.2.1 顺序查找

6.2.2 折半查找

6.2.3 分块查找

6.3 B树和B+树

6.3.1 B树及其基本操作

6.3.2 B+树的基本概念

第七章 排序

7.1 排序的基本概念

7.1.1 排序的定义

7.2 插入排序

7.2.1 直接插入排序

7.2.2 折半插入排序

7.2.3 希尔排序

7.3 交换排序

7.3.1 冒泡排序

7.3.2 快速排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值