数据结构第一章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
➢ 数据元素(Data Element):数据的基本单 位,是数据(集合)中的一个“个体”,一个 数据元素由若干个数据项组成。
➢ 数据项:具有独立意义的不可分割的最小 标识单位。
第1章 概 论
8
➢ 数据对象(Data Object):是具有相同性质 的若干个数据元素的集合。
➢ 数据结构(Data Structure):数据元素以及 之间存在的关系。表示一种独特的数据元 素间的逻辑结构和存储结构关系以及这个 数据元素集合上的操作集合。
第1章 概 论
28
1.1.4 数据结构和数据类型
➢ 基本数据类型 ➢ 指针类型 ➢ 数组类型 ➢ 结构体类型 ➢ 共用体类型 ➢ 自定义类型 ➢ 引用运算符
第1章 概 论
29
(2) 抽象数据类型
抽象数据类型(Abstract Data Type简写为 ADT)指的是用户进行软件系统设计时从问题 的数学模型中抽象出来的逻辑数据结构和逻 辑数据结构上的运算,而不考虑计算机的具体 存储结构和运算的具体实现算法。
➢ 存储结点信息的同时,还建立附加的索 引表
➢ 索引表的每一项称为索引项,形式: (关键字,地址)
➢ 关键字:结点的惟一标识 ➢ 地址:指向结点的指针
第1章 概 论
27
哈希(散列)存储结构
➢ 根据结点的值确定结点的存储地址。 ➢ 以结点中某个字段的值为自变量,通过
某个函数(称为散列函数)计算出对应 的函数值;再把i当作结点的存储地址。
} 上述函数的调用改为swap2(&a,&b),
第1章 概 论
40
难点
引入“引用”的概念 例如:
int a=4; /*a为普通的整型变量*/ int &b=a; /*b是a的引用变量*/
这里说明b变量是变量a的引用,b也等于4,之后 这两个变量同步改变。当a改变时b也同步改变, 同样,当b改变时a也同步改变。
} ADT Complex
第1章 概 论
32
1.2 算法和算法分析
第1章 概 论
33
1.2.1 算法及其表示
➢ 算法(Algorithms)是对特定问题求解 步骤描述的计算机指令的有限序列。其 中每一条指令表示一个或多个操作。
第1章 概 论
34
算法的5个重要特征
➢ 有限性:计算机的指令执行序列是有限 的,且每一步都可在有穷时间内完成。
处理的数据个数n的关系。
第1章 概 论
49
➢ 语句的频度(frequency count)指的是该语句重 复执行的次数。
➢ 算法的时间量度记作
T(n)=O(f(n))
它表示随问题规模n的增大,算法执行时 间的增长率和函数f(n)的增长率相同,T(n)称 做算法的渐进时间复杂度(asymptotic),简 称时间复杂度。
Stud数组起始地址
第1章 概 论
14
存放学生表的链表的结点类型StudType定义为:
typedef struct studnode
{ int no;
/*存储学号*/
char name[8];
/*存储姓名*/
char sex[2];
/*存储性别*/
char class[4];
/*存储班号*/
struct studnode *next; /*存储指向下一个学生的指针*/
第1章 概 论
24
LOC(i)=q+(i-1)*p
q—第一个元素所占单元的首地址 p—每个元素所占的单元数
第1章 概 论
25
链式存储结构
➢ 每个结点单独存储,无需占用一整块存 储空间
➢ 为了描述结点之间的关系,需要给每个 结点附加指针字段,用于存放相邻结点 的存储地址
第1章 概 论
26
索引存储结构
9901
20
陈华

9902
12
王奇

9901
26
董强

9902
5
王萍

9901
第1章 概 论
11
逻辑关系
该表中的记录顺序反映了数据元素之间的逻辑关系, 用学号标识每个学生记录,这种逻辑关系可以表示为:
<1,8>,<8,34>,<34,20>,<20,12>,<12,26>,<26,5>
其中尖括号“<ai,ai+1>”表示元素ai和ai+1之间是相邻的, 即ai在ai+1之前,ai+1在ai之后。
主讲:傅晓丹 E-mail:fxd106@163.com
第1章 概 论
1
课程要求
➢ 学会分析数据对象的特征,选择适当的 数据结构及相应处理算法求解问题;
➢ 了解掌握各种数据类型及基本操作的算 法实现;
➢ 掌握一般算法的复杂度分析。
第1章 概 论
2
实验安排
➢ 本课程采用讲授与实验相结合,用上机 课的课内时间,通过上机,完成一项课 程设计,并撰写实验报告。目的在于让 大家了解数据类型的内在含义。
➢ 正确性:算法应确切地满足具体问题的 要求,这是算法设计的基本目标。
➢ 可使用性:即用户友好性,要很方便的 使用。
➢ 可读性:算法的可读性有利于人们对算 法的理解,这既有利于程序的调试和维 护,也有利于算法的交流和移植。
第1章 概 论
45
➢ 健壮性:当输入非法数据时算法要能做 出适当的处理,而不应产生不可预料的 结果。
} StudType;
第1章 概 论
15
链表首结点地址head
学生表构成的链 表如右图所示。其 中的head为第一个 数据元素的指针。
1 张斌 男 9901 8 刘丽 女 9902 34 李英 女 9901 20 陈华 男 9902 12 王奇 男 9901 26 董强 男 9902 5 王萍 女 9901 ∧
第1章 概 论
42
使用引用定义交换函数
void swap(int &x,int &y)
/*形参前的“&”符号不是指针运算符 */
{
int tmp=x;
x=y;y=tmp
}
当用执行语句swap(a,b)时,a和b的值发生
了交换。
第1章 概 论
43
1.3 算法分析
第1章 概 论
44
1.3.1 算法设计的目标
第1章 概 论
12
存放学生表的结构体数组Stud定义为:
struct
{ int no;
/*存储学号*/
char name[8]; /*存储姓名*/
char sex[2]; /*存储性别*/
char class[4]; /*存储班号*/
} Stud[7]={{1,“张斌”,“男”,“9901”},…,
第1章 概 论
50
for (i=2;i<=n;++i)
for(j=2;j<=i-1;++j)
{ ++x; a[i][j]=x;} 语句++x的执行次数关于n的增长率为n² 它是语句频度表达式(n-1)(n-2)/2中增 长最快的项。 附:Sn=(a1+an)n/2
int tmp; tmp=x;x=y;y=tmp; } 注意:a和b的值不会发生了交换。
第1章 概 论
39
采用指针的方式来回传形参的值,需将上 述函数改为:
void swap2(int *x,int *y)
{
int tmp; tmp=*x; /*将x的值放在tmp中*/ *x=*y; /*将x所指的值改为*y*/ *y=tmp; /*将y所指的值改为tmp*/
第1章 概 论
47
1.3.1 算法时间复杂度分析
一个算法是由控制结构(顺序、分支和循环 三种)和原操作(指固有数据类型的操作)构成的, 则算法时间取决于两者的综合效果。
控制语句1 原操作

控制语句n 原操作
一个算法
第1章 概 论
48
相关因素
➢ 依据的算法选用何种策略; ➢ 书写算法的程序设计语言; ➢ 编译程序所产生的机器代码的质量; ➢ 机器执行指令的 速度; ➢ 问题的规模,即算法的时间效率与算法
抽象数据类型=数据元素集合+抽象运算
第1章 概 论
30
e1+e2i 例如,抽象数据类型复数的定义: ADT Complex { 数据对象:
D={e1,e2|e1,e2均为实数} 数据关系:
R1={<e1,e2>| e1是复数的实数部分,e2 是复数的 虚数部分 }
第1章 概 论
31
基本操作: AssignComplex(&Z,v1,v2):构造复数Z。 DestroyComplex(&Z):复数Z被销毁。 GetReal(Z,&real):返回复数Z的实部值。 GetImag(Z,&Imag):返回复数Z的虚部值。 Add(z1,z2,&sum):返回两个复数z1,z2的和。
int n=2; while(n%2==0)
n+=2; printf(“%3d\n”,n); }
死循环
第1章 概 论
37
void exam2() {
除零错误
int x,y=0;
x=5/y;
printf(“%d,%d\n”,x,y);
}ቤተ መጻሕፍቲ ባይዱ
第1章 概 论
38
1.2.2 算法描述
编写一个函数swap1(x,y),当执行语句 swap1(a,b)时,交换a和b的值。 void swap1(int x,int y) {
第1章 概 论
18
集合
线性


第1章 概 论
19
➢ 数据结构的形式定义:
Data--Structure=(D,R) D——数据元素集合 R——关系集合
➢ 如: <a,b>:表示结点a和结点b的关系 ➢ (a,b):表示结点a和结点b之间存在双向
关系
第1章 概 论
20
【例1.2】 B1=(D,R) D={1,2,3,4,5,6,7,8,9} R={r} r={<1,2>,<1,3>,<3,4>,<3,5>,<4,6>,<4,7>,
➢ 高时间效率:算法的时间效率是指算法 的执行时间。
➢ 低存储量需求:算法在执行时一般要求 额外的内存空间。
第1章 概 论
46
度量方法
➢ 事后统计的方法 缺陷:一是必须先运行依据算法编
制的程序;二是所得时间的统计量依赖 于计算机的硬件、软件等环境因素,有 时容易掩盖算法本身的优略。 ➢ 事前分析估算方法
➢ 可以把数据结构看成是带结构的数据元素 的集合。
第1章 概 论
9
例1.1 有一个学生表如表1.1所示。这个 表中的数据元素是学生记录,每个数据元素 由四个数据项(即学号、姓别、性别和班号) 组成。
第1章 概 论
10
表1.1 学生表
学号 姓名 性别 班号
1
张斌

9901
8
刘丽

9902
34
李英

学生表构成的链表
第1章 概 论
16
1.1.2 逻辑结构的类型
➢ 集合结构:结构中的数据元素之间除了 “同属于一个集合”的关系外,别无其 他关系;
➢ 线性结构:结构中的数据元素之间存在 一个对一个的关系;
第1章 概 论
17
➢ 树形结构:结构中的数据元素之间存在 一个对多个的关系;
➢ 图状结构或网状结构:结构中的数据元 素之间存在多个对多个的关系。
<5,8>,<7,9>}
第1章 概 论
21
1
2
3
4
5
6
7
8
9
第1章 概 论
22
1.1.3 存储结构类型
➢ 数据对象在计算机中的存储表示为数据 的存储结构。
➢ 既要存储各数据元素的数据,又要存储 数据元素之间的逻辑关系。
第1章 概 论
23
顺序存储结构
➢ 把逻辑上相邻的元素存储在一组连续的 存储单元中,其元素之间的逻辑关系由 存储单元地址间的关系隐含表示。
第1章 概 论
3
数据结构的内容
➢ 线性表 ➢ 栈与队列 ➢串 ➢ 数组
➢树 ➢图 ➢ 查找 ➢ 排序
第1章 概 论
4
数据结构的定位
数离数
据散据
描数结

述学构






过 计算

程 算法
描 方设
述 法计
第1章 概 论
5
第1章 概 论
6
1.1 什么是数据结构?
第1章 概 论
7
➢ 数据(Data):是所有能被输入到计算机中, 且能被计算机处理的符号的集合。它是计 算机操作的对象的总称,也是计算机处理 的信息的某种特定的符号表示形式。
{5,"王萍","女","9901"}};
第1章 概 论
13
结构体数组Stud各元素在内存中顺序存放,即 第i(1≤i≤6)个学生对应的元素Stud[i]存放在第i+1 个学生对应的元素Stud[i+1]之前,Stud[i+1]正好 在Stud[i]之后。
Stud[0]
Stud[6]
1 张斌 男 9901 … 5 王萍 女 9901
第1章 概 论
41
main() {
int a=2; int &b=a; printf("a=%d,b=%d\n",a,b); /*输出:a=2,b=2*/ b++; printf("a=%d,b=%d\n",a,b); /*输出:a=3,b=3*/ a++; printf("a=%d,b=%d\n",a,b); /*输出:a=4,b=4*/ }
➢ 确定性:每一条指令的含义明确,无二 义性。
➢ 可行性:算法是能执行的,即算法中描 述的操作都是可以通过已经实现的基本 运算的有限次执行来实现。
第1章 概 论
35
➢ 输入性:具有零个或若干个输入量。
➢ 输出性:至少产生一个输出或执行一个 有意义操作。
第1章 概 论
36
void exam1() {
相关文档
最新文档