c语言数据结构清华出版社第一张课件
清华大学C语言教学课件(共16个PPT)第1个共26页文档
53、 伟 大 的 事 业,需 要决心 ,能力 ,组织 和责任 感。 ——易 卜 生 54、 唯 书 籍 不 朽。——乔 特
55、 为 中 华 之 崛起而 读书。 ——周 恩来
清华大学C语言教学课件(共16个PPT)
第1个
21、没有人陪你走一辈子,所以你要 适应孤 独,没 有人会 帮你一 辈子, 所以你 要奋斗 一生。 22、当眼泪流尽的时候,留下的应该 是坚强 。 23、要改变命运,首先改变自己。
24、勇气很有理由被当作人类德性之 首,因 为这种 德性保 证了所 有其余 的德性 。--温 斯顿. 丘吉尔 。 25、梯子的梯阶从来不是用来搁脚的 ,它只 是让人 们的脚 放上一 段时间 ,以便 让别一 只脚能 够再往 上登。
《数据结构》教程c语言版
《数据结构》第五版清华大学自动化系李宛洲2004年5月目录第一章数据结构--概念与基本类型 (6)1.1概述 (6)1.1.1数据结构应用对象 (6)1.1.2学习数据结构的基础 (7)1.1.2.1 C语言中的结构体 (7)1.1.2.2 C语言的指针在数据结构中的关联作用 (8)1.1.2.3 C语言的共用体(union)数据类型 (12)1.1.3数据结构定义 (15)1.2线性表 (17)1.2.1 顺序表 (18)1.2.2 链表 (20)1.2.2.1链表的基本结构及概念 (20)1.2.2.2单链表设计 (22)1.2.2.3单链表操作效率 (29)1.2.2.4双链表设计 (30)1.2.2.5链表深入学习 (32)1.2.2.6稀疏矩阵的三元组与十字链表 (36)1.2.3 堆栈 (41)1.2.3.1堆栈结构 (41)1.2.3.2基本操作 (42)1.2.3.3堆栈与递归 (44)1.2.3.4递归与分治算法 (45)1.2.3.5递归与递推 (49)1.2.3.6栈应用 (52)1.2.4 队列 (57)1.2.4.1队列结构 (57)1.2.3.2队列应用 (59)1.3非线性数据结构--树 (64)1.3.1 概念与术语 (64)1.3.1.1引入非线性数据结构的目的 (64)1.3.1.2树的定义与术语 (65)1.3.1.3树的内部节点与叶子节点存储结构问题 (66)1.3.2 二叉树 (66)1.3.2.1二叉树基本概念 (66)1.3.2.2完全二叉树的顺序存储结构 (68)1.3.2.3二叉树遍历 (69)1.3.2.4二叉树唯一性问题 (71)1.3.3 二叉排序树 (72)1.3.3.1基本概念 (72)1.3.3.2程序设计 (73)1.3.4 穿线二叉树 (79)1.3.4.1二叉树的中序线索化 (80)1.3.4.2中序遍历线索化的二叉树 (81)1.3.5 堆 (82)1.3.5.1建堆过程 (83)1.3.5.2在堆中插入节点 (85)1.3.6 哈夫曼树 (86)1.3.6.1最佳检索树 (86)1.3.6.2哈夫曼树结构与算法 (88)1.3.6.3 哈夫曼树应用 (90)1.3.6.4哈夫曼树程序设计 (92)1.3.7 空间数据结构----二叉树深入学习导读 (95)1.3.7.1k-d树概念 (96)1.3.7.2k-d树程序设计初步 (97)1.4非线性数据结构--图 (100)1.4.1图的基本概念 (100)1.4.2图形结构的物理存储方式 (103)1.4.2.1相邻矩阵 (103)1.4.2.2图的邻接表示 (104)1.4.2.3图的多重邻接表示 (106)1.4.3图形结构的遍历 (107)1.4.4无向连通图的最小生成树(minimum-cost spanning tree:MST) (110)1.4.5有向图的最短路径 (113)1.4.5.1单源最短路径(single-source shortest paths) (113)1.4.5.2每对顶点间最短路经(all-pairs shortest paths) (116)1.4.6拓扑排序 (117)第二章检索 (123)2.1顺序检索 (123)2.2对半检索 (124)2.2.1 对半检索与二叉平衡树 (124)2.2.2对半检索思想在链式存储结构中的应用---跳跃表 (127)2.3分块检索 (133)2.4哈希检索 (134)2.4.1哈希函数 (135)2.4.2闭地址散列 (136)2.4.2.1线性探测法和基本聚集问题 (136)2.4.2.2删除操作造成检索链的中断问题 (138)2.4.2.3随机探测法 (139)2.4.2.4平方探测法 (140)2.4.2.5二次聚集问题与双散列探测方法 (141)2.4.3开地址散列 (142)2.4.4哈希表检索效率 (142)第三章排序 (145)3.1交换排序方法 (145)3.1.1直接插入排序 (145)3.1.2冒泡排序 (147)3.1.3 选择排序 (148)3.1.4 树型选择排序 (149)3.2S HELL排序 (150)3.3快速排序 (152)3.4堆排序 (154)3.5归并排序 (156)3.6数据结构小结 (159)3.6.1 数据结构的基本概念 (159)3.6.2 数据结构分类 (159)3.6.2.1数据结构中的指针问题 (160)3.6.2.2线性表的效率问题 (161)3.6.2.3二叉树 (161)3.6.3排序与检索 (161)3.7算法分析的基本概念 (162)3.7.1基本概念 (162)3.7.2上限分析 (164)3.7.3下限分析 (164)3.7.4空间代价与时间代价转换 (165)第6章高级数据结构内容--索引技术 (167)6.1基本概念 (167)6.2线性索引 (168)6.2.1 线性索引 (168)6.2.2 倒排表 (169)6.32-3树 (170)6.3.1 2-3树定义 (172)6.3.2 2-3树节点插入 (173)6.4B+树 (178)6.4.1 B+树定义 (178)6.4.2 B+树插入与删除 (180)6.4.3 B+树实验设计 (182)第一章数据结构--概念与基本类型1.1概述1.1.1数据结构应用对象计算机应用可以分为两大类,一类是科学计算和工业控制,另一类是商业数据处理。
数据结构C语言版-PPT课件
存储结构(物理结构)---运算(算法)
23
数据元素及其关系在计算机存储器中的存储方式。 是逻辑结构用计算机语言的实现,它依赖于计算机语言。
1.2 基本概念和术语
数据结构的三个方面: 线性结构
数据的逻辑结构 非线性结构 数据的存储结构
24
线性表 栈 队 树形结构
图形结构
顺序存储
链式存储
数据的运算:检索、排序、插入、删除、修改等
26
四个基本结构
•
集合 线性结构 树形结构
•
•
•
网状结构
27
线性结构
bin
dev
etc
lib
user
树形结构
树
3 1 2
2 5
二叉树
2
二叉排序树
1
9 3 6 3
1 13
4
6 7 8 9 10
4
7 8
5 9
6
8 5 7
10
11 12 13 14
11
28
堆结构
11
7 3 5 10 4 8
12 9 6
定义2----
22
按某种逻辑关系组织起来的一批数据(或称带结构 的数据元素的集合)应用计算机语言并按一定的存储 表示 方式把它们存储在计算机的存储器中,并在其上 定义了一个运算的集合。
1.2 基本概念和术语
数据结构的三个方面的含义:
逻辑结构--数据元素间抽象化的相互关系(简称为数据结构)。 与数据的存储无关,独立于计算机,它是从具体问题抽 象出来的数学模型。
按书名
S 0 1 L 0 1 S 0 1 S 0 2 … …
索引表
分类号: 高 等 数 学 0 0 1 , 0 0 3 … … 樊映川 出版单位: 理 论 力 学 0 0 2 , … … . . 华罗庚 出版时间: 线 性 代 数 0 0 4 , … … 栾汝书 价格: … …… … . .
数据结构(c语言版)课件 第一章 绪论 (严蔚敏、吴伟民编 清华大学出版社)
可进行的操作的总称
例 C语言中,提供int, char, float, double等基本 数据类型,数组、结构体、共用体、枚举 等构造数据类型,还有指针、空(void)类 型等。用户也可用typedef 自己定义数据类型 typedef struct { int num; char name[20]; float score; }STUDENT; STUDENT stu1,stu2, *p;
存储内容 元素1 元素4 …….. 元素2 ……..
指针 1400 ∧ ……. 1536 …….
1536
元素3
1346
数据结构的三个方面:
线性结构
数据的逻辑结构 非线性结构 数据的存储结构
线性表 栈 队 树形结构
图形结构
顺序存储
链式存储
数据的运算:检索、排序、插入、删除、修改等
数据类型—高级语言中指数据的取值范围及其上
数据的逻辑结构—只抽象反映数据元素的逻辑关系 数据的存储(物理)结构—数据的逻辑结构在计算
机存储器中的实现
存储结构分为: 顺序存储结构——借助元素在存储器中的相对位置来表示 数据元素间的逻辑关系 链式存储结构——借助指示元素存储地址的指针表示数据 元素间的逻辑关系 数据的逻辑结构与存储结构密切相关
树
……..
……..
…...
…...
…...
…...
多叉路口交通灯管理问题
图
C AB
AC
AD
B
D
BA
BC
BD
E
DA EA EB DB EC DC ED
A
数据结构定义: 是一门研究非数值计算的程序设
计问题中计算机的操作对象以及它们之间的关系 和操作等等的学科
数据结构C语言版ppt课件-PPT精品文档
…
an-1,0 an-1,1
…
an-1,n-1
an-1,0 an-1,1
…
…
Ann
a0,0 a1,0
a0,1 a1,1
… …
a0,n-1 a1,n-1
Ann
a0,0 a1,0
a1,1
…
…
…
an-1,n-1
对称阵
中国网页设计 xin126
下三角矩阵
第5章 数组和广义表
中国网页设计 xin126
数据结构
(C语言版)
严蔚敏、吴伟民编著 清华大学出版社 学习网站:xin126/list.asp?id=301
中国网页设计 xin126
第5章 数组和广义表
主要内容:
一、数组的定义 二、数组的表示和实现 三、矩阵的压缩存储 四、广义表的定义 五、广义表的存储结构
中国网页设计 xin126
第5章 数组和广义表
0 0 0 0 0 0
0 0 0 0 0 0
中国网页设计 xin126
第5章 数组和广义表
(2) 稀疏矩阵的存储: 若按常规方法进行存储,零值元素会占了很大空间 因此对于稀疏矩阵的存储通常采用以下两种方式: 三元组表和十字链表进行存储。
中国网页设计 xin126
第5章 数组和广义表
中国网页设计 xin126
第5章 数组和广义表
以行序为主序的求址公式:
假设每个数据元素占L个存储单元,则二维 数组A中任一元素aij的存储位置可由下式确定: LOC(i, j) = LOC(0, 0) + (n×i + j)*L 式中,LOC(i, j)是aij的存储位置,LOC(0, 0)是a00的存储位置,即二维数组A的起始存储 位置,也称为基地址或基址。b2是数组第二维 的长度,即数组A(m×n)中的列数n。
清华大学C语言教学课件(共16个PPT)第1个共26页
•
6、黄金时代是在我们的前面,而不在 我们的 后面。
•
7、心急吃不了热汤圆。
•
8、你可以很有个性,但某些时候请收口 (蹩脚 的工人 总是说 工具不 好)。
•
10、只要下定决心克服恐惧,便几乎 能克服 任何恐 惧。因 为,请 记住, 除了在 脑海中 ,恐惧 无处藏 身。-- 戴尔. 卡耐基 。
55、 为 中 华 之 崛起而 读书。 ——周 恩来
谢谢!
51、 天 下 之 事 常成 于困约 ,而败 于奢靡 。——陆 游 52、 生 命 不 等 于是呼 吸,生 命是活 动。——卢 梭
53、 伟 大 的 事 业,需 要决心 ,能力 ,组织 和责任 感。 ——易 卜 生 54、 唯 书 籍 不 朽。——乔 特
C语言课件(清华大学出版社)
C程序设计(第三版)
第二章
C程序设计(第三版)
本章要点
算法的概念 算法的表示 结构化程序设计方法
C程序设计(第三版)
主要内容
2.1 算法的概念 2.2 简单算法举例 2.3 算法的特性 2.4 怎样表示一个算法 2.5 化程序设计方法
(8)程序可移植性好(与汇编语言比)。 基本上不做修改就能用于各种型号的计 算机和各种操作系统。
C程序设计(第三版)
1.2 C语言的特点
问题:既然有了面向对象的C++语言,为 什么还要学习C语言?
解释1:C++是由于开发大型应用软件的需 要而产生的,并不是所有的人都要去编 写大型软件。
解释2:面向对象的基础是面向过程。C++ 是面向对象的语言,C是面向过程的,学 起来比C语言困难得多,所以不太适合程 序设计的初学者。
C程序设计(第三版)
设y为被检测的年份,算法可表示如下 :
S1:2000 → y
S2:若y不能被4整除,则输出y “不是闰年”。然后转 到S6
S3:若y能被4整除,不能被100整除,则输出y “是闰 年”。然后转到S6
S4:若y能被100整除,又能被400整除,输出y“是闰年 ”,否则输出“不是闰年”。 然后转到S6。
C程序设计(第三版)
用这种方法表示的算法具有通用性、 灵活性。S3到S5组成一个循环,在实现 算法时 要反复多次执行S3,S4,S5等步 骤,直到某一时刻,执行S5步骤时经过 判断,乘数i已超过规定的数值而不返回 S3步骤为止。此时算法结束,变量p的值 就是所求结果。
数据结构(C语言版)第1章 绪论
(C语言版 语言版) 语言版
主讲教师: 吴让仲 主讲教师:
Instructor: WU, RANGZHONG E-mail: wurangzhong@
1/68
教材 (Text Book) 数据结构(C语言版 数据结构 语言版) 语言版
17/68
逻辑结构的分类
数据的逻辑结构是本质,可以分为: 数据的逻辑结构是本质,可以分为: 线性结构和 线性结构和非线性结构 也可以分为 集合 结构中的数据元素除了同属于一种类型外,别无 结构中的数据元素除了同属于一种类型外, 其它关系. 其它关系. 线性结构 结构中的数据元素之间存在一对一的关系. 结构中的数据元素之间存在一对一的关系. 树型结构 结构中的数据元素之间存在一对多的关系. 结构中的数据元素之间存在一对多的关系. 图状结构或网状结构 结构中的数据元素之间存在多对 多的关系. 多的关系.
数据结构发展简史
作为独立课程国外1968年开始设立. 作为独立课程国外1968年开始设立. 1968年开始设立 1968年美国KNUTH教授开创了数据结构的最初 1968年美国KNUTH教授开创了数据结构的最初 年美国KNUTH 体系. 体系. 计算机专业的专业基础课. 计算机专业的专业基础课. 非计算机专业的主要选修课. 非计算机专业的主要选修课.
25/68
数据结构课程的内容
数据结构是介于数学,计算机硬件和计算机软 数据结构是介于数学,计算机硬件和 数学 件之间的一门计算机科学与技术专业的核心课 是编译原理,操作系统,数据库, 程,是编译原理,操作系统,数据库,人工智 能等课程的基础.同时,数据结构技术也广泛 能等课程的基础.同时, 应用于信息科学,系统工程, 应用于信息科学,系统工程,应用数学以及各 信息科学 种工程技术领域. 种工程技术领域. 数据结构课程的先修课程有高级语言程序设计 和离散数学. 和离散数学
数据结构(C语言版上)清华大学出版社PPT课件
18
数据结构是计算机专业的专业基础 课。它主要讨论在软件开发中如何 进行数据的组织、数据的表示和数 据的处理。它不仅为操作系统、编 译原理、数据库系统、计算机网络 等后续课提供必要的知识,而且也 为学习者提供必要的技能训练。
19
1.2.2 数据结构的应用举例
例1.2 电话号码的查询问题。 要求编写一个电话号码的查询程序。对于任 意给出的一个姓名,如果该人留有电话号码, 那么就找出他的电话号码;否则就指出该人 没有电话号码。
学号
04081101 04081102 04081103 04081104
┆ 04081150
姓名
陈小洁 马丽丽 林春英 王澄娟
┆ 张吉祥
计算机 导论 80 75 82 90 ┆
70
高等数 学 90 68 78 85 ┆
88
普通物 理 85 78 66 93 ┆
75
平均成 绩 85 74 75 89 ┆
11
12
⑵数据的物理结构: 又称存储结构。是 数据的逻辑结构在计算机存储器内的表 示(又称映象)。它属于具体实现的视 图,是面向计算机的。
⑶ 数据元素之间的运算(关系):对数 据元素施加的操作,有时也直接称为数 据的运算或操作。
13
例1.1 学生成绩表(表1.1)是一个数据结构。 表1.1 学生成绩表(每行是一个数据元素)
数据——在计算机科学中指所有能输入到计算机中并被计 算机程序处理的符号的总称。如图像、数、字符、声音、 视频等都可以通过编码而由计算机处理,因此它们也属于 数据的范畴。
4
数据元素(data element):
是数据的基本单位。通常在计算机程序 中作为一个整体进素可以由若干个数据项(也称字段、 域)组成,数据项是数据不可分割的最 小单位。
清华《C语言程序设计》1概述和数据类型ppt
级语言与数据结构的基本思想,初步学会运用计算机语言解决
实际问题、培养学生程序设计逻辑思想,并为今后进一步使用
其他面向对象的可视化开发工具,开发管理信息系统等应用程
序打下基础。
C语言程序设计
5
第
一
章
C 课程目标:
语
言 简
❖熟记C语言的基本概念
介
❖熟悉C-FREE的上机操作环境
❖会读、会编、会调试C程序
第 一 章
C 语 言 简 介
C语言程序设计
1
第
一 章
C 教材、参考书与课时安排
语
言
– 教材
简
介
C语言程序设计 唐国民 编著 清华大学出版社
– 参考书
C程序设计 谭浩强 清华大学出版社
C高级实用程序设计 王士元 清华大学出版 社
– 课时安排
授课 :60学时
C语言程序设计
2
第
一
章
– 上机安排
C 语
• 上机地点:1幢四楼计算机机房431
• 1987年,ANSI公布了新标准——87 ANSI C。
• 1990年,国际标准化组织接受了87 ANSI C为ISO
C 的标准(ISO9899—1990)。
• 1994年,ISO又修订了C语言标准。
• 目前流行的C语言编译系统大多是以ANSI C为基础
进行开发的。
C语言程序设计
13
第
一 章
二、
– 认真、独立、按时完成并提交作业
– 重视上机实践,有效利用宝贵的上机时间
C语言程序设计
4
第
一
章 一、 C语言程序设计在计算机科学与技术专业中的作用与地位
数据结构(C语言)PPT
数据的逻辑结构: 数据之间的结构关系,是具体关系的抽象。
数据结构的基本操作: 指对数据结构的加工处理
数据的存储结构 (物理结构): 数据结构在计算机内存中的表示
数据结构基本操作的实现: 基本操作在计算机上的实现(方法)
主菜单
难度大 综合性强 必须下苦功学习 课程说明 考试 每周4节,共20周 评分标准:平时成绩20%〔包括考勤、课
堂答复以下问题等〕、期中成绩30%,期 末成绩50%
3
教学内容
主菜单
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章
绪论 线性表 栈和队列 数组和串 树 图 内部排序 查找 文件
例
求两个正整数 m,n 中的最大数MAX的算法
(1)若 m > n 则 max=m (2)若 m <= n 则 max=n
算法的基本特征: 1)输入:0个或多个输入; 2)输出:1个或多个输出; 3)有穷性:算法必须在有限步内结束; 4)确定性:组成算法的操作必须清晰无二义性。 5)可行性:组成算法的操作必须能够在计算机上实现。
数据元素:数据的基本单位。相当于“记录”,在 计 算机程序中通常作为一个整体考虑和处理
数据项: 相当于记录的“域”, 是数据的不可分 割 的最小单位。
如:学号 数据对象:性质相同的数据元素的集合.
例如: 所有班名相同的记录集合 数据结构:是相互间存在关系的数据元素集合。
12
主菜单
1.2 基本概念和术语
4
主菜单
5
主要知识点
1.1 什么是数据结构 1.2 基本概念和术语 1.3 运算、算法和算法分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如:一个有12位的十进制数,可以用三个4 位的十进制数表示。 3214,6587,9345---a1( 3214),a2(6587),a3(9345) a1,a2,a3之间存在次序关系: <a1,a2>,<a2,a3> 颠倒则错误
例二:2行3列的二维数组{a1,a2,a3,a4,a5,a6} a1 a4 a2 a5 a3 a6
可见,在顺序存储结构中只包含数据元素本身的信息, 而链式存储结构中以"由数据元素 x 的存储映象和附 加指针合成的结点"表示数据元素。
存储结构的描述方法随编程环境的不同而不同,当用高级程序涉及的油 印间相编程时,通常可用高级编程语言中提供的数据类型描述之。 例如,当以"顺序存储结构"表示前述定义的长整数时,可将它定义为: typedef int Long_int[3]; 同样,此时对数据元素也要借用高级编程语言中的数据类型描述之。 对每一个数据结构而言,必定存在与它密切相关的一组操作。若操作 的种类和数目不同,即使逻辑结构相同,数据结构能起的作用也不同。 不同的数据结构其操作集不同,但下列操作必不可缺: 1) 结构的生成; 2) 结构的销毁; 3) 在结构中查找满足规定条件的数据元素; 4) 在结构中插入新的数据元素; 5) 删除结构中已经存在的数据元素; 6) 遍历。
第一章 绪论
数据结构课程的意义:
有建议或问题:hht95@ 本章讨论的4个问题: 本章讨论的 个问题: 个问题 1、什么是数据结构(讨论范畴) 2、基本概念和术语 3、抽象数据类型的表示与实现 4、算法分析
一、讨论范畴 这是一门与程序设计紧密相关的课程。 美国计算机专家 PASCAL创始人 Niklaus Wirth教授 1976年出版 《算法+数据结构= 程序设计》一书。
例二:计算机对弈 算法:对弈的规则与策略 模型:棋子、棋盘怎么表示
例三:学生会的数据库管理 算法:需要管理的项目、如何管理、用户界面 模型:各种表格和数据库 分析问题、抽象物理含义得到数学模型 1、数值型相关 :线性或非线性方程组(数学问 题) 2、非数值型相关 :模型是数据结构讨论的问题
数据结构:描述现实世界实体的数学模型(非数值计算 及其 数据结构:描述现实世界实体的数学模型 非数值计算)及其 非数值计算 上的操作在计算机中如何表示和实现。 上的操作在计算机中如何表示和实现。
抽象数据类型的形式描述为: ADT = ( D,S,P ) 其中:D 是数据对象, S 是 D 上的关系集, P 是 D 的基本操作集。 例如,抽象数据类型“复数”的定义为: 其中(D,S)即为相应的数据结构的定义。 ADT Complex { 数据对象: 数据对象:D = {e1,e2 | e1,e2 RealSet } 数据关系: 数据关系:R1 = {<e1,e2> | e1是复数的实部, e2是复数的虚部 }
除了函数的参数需要说明类型外,算法中使用的辅助变量可以不 作变量说明,必要时对其作用给予注释。 语句序列中仅包含C语言的三种基本结构:顺序结构、选择结构 和循环结构。
通常有两种衡量算法效率的方法:事后统计法和事前分析估算法。相比 之下前者的缺点是,必须在计算机上实地运行程序,容易由其它因素 掩盖算法本质;而后者的优点是,可以预先比较各种算法,以便均衡 利弊而从中选优。 如何估算算法的时间效率? 和算法执行时间相关的因素有:1)算法所用“策略”;2)算法 所解问题的“规模”;3)编程所用“语言”;4)“编译”的质量; 5)执行算法的计算机的“速度”。显然,后三条受着计算机硬件和 软件的制约,既然是“估算”,仅需考虑前两条。 事后统计容易陷入盲目境地,例如,当程序执行很长时间仍未结 束时,不易判别是程序错了还是确实需要那么长的时间。 一个算法的"运行工作量"通常是随问题规模的增长而增长 随问题规模的增长而增长,因此比较不 随问题规模的增长而增长 同算法的优劣主要应该以其"增长的趋势 增长的趋势"为准则。假如,随着问题规 增长的趋势 模 n 的增长,算法执行时间的增长率和 算法执行时间的增长率和f(n)的增长率相同 的增长率相同,则可记作: 算法执行时间的增长率和 的增长率相同
抽象数据类型需要通过高级编程语言中已经 实现的数据类型(通常称之谓固有数据类 型)来实现。 例如利用C语言实现的"复数"类型如下描述:
文件
四、算法及算法分析 何谓"算法"? 算法是对问题求解过程的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作序 列。严格说来,一个算法必须满足以下五个重要特性: 算法是程序设计的另一个不可缺的要素,因此在讨论数据结构的同时免不了要讨论相应的算法。 (1) 有穷性 对于任意一组合法的输入值,在执行有穷步骤之后一定能结束。 这里有两重意思,即算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成。 (2) 确定性 对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者 都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径。 确定性表现在对算法中每一步的描述都没有二义性,只要输入相同,初始状态相同,则无论执 行多少遍,所得结果都应该相同。 (3) 可行性 算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之。 可行性指的是,序列中的每个操作都是可以简单完成的,其本身不存在算法问题,例如,"求x 和y的公因子"就不够基本。 (4) 有输入 作为算法加工对象的量值,通常体现为算法中的一组变量。但有些算法的字面上可以没 有输入,实际上已被嵌入算法之中。 输入值即为算法的操作对象,但操作的对象也可以由算法自身生成,如"求100以内的素数",操 作对象是自然数列,可以由变量逐个增1生成。 (5) 有输出 它是一组与"输入"有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系 即为算法的功能。 在设计算法时,通常应考虑以下原则:首先说设计的算法必须是"正确的",其次应有很好的"可读性 ",还必须具有"健壮性",最后应考虑所设计的算法具有"高效率与低存储量"。 所谓算法是正确的,除了应该满足算法说明中写明的“功能”之外,应对各组典型的带有苛刻条件 的输入数据得出正确的结果。在算法是正确的前提下,算法的可读性是摆在第一位的,这在当今大 型软件需要多人合作完成的环境下是很重要的,另一方面,晦涩难读的程序易于隐藏错误而难以调 试。算法的效率指的是算法的执行时间,算法的存储量指的是算法执行过程中所需最大存储空间。
基本操作: 基本操作: InitComplex( &Z, v1, v2 ) 操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和v2 的值。 DestroyComplex( &Z) 初始条件:复数已存在。 操作结果:复数Z被销毁。 GetReal( Z, &realPart ) 初始条件:复数已存在。 操作结果:用 realPart 返回复数Z的实部值。 GetImag( Z, &ImagPart ) 初始条件:复数已存在。 操作结果:用 ImagPart 返回复数Z的虚部值。 Add( z1,z2, &sum ) 初始条件:z1,z2 是复数。 操作结果:用sum返回两个复数z1,z2的和值。 } ADT Complex
a2 a5 a1 a3 a6 a4 <a1,a2>, <a1,a3>, <a1,a4>, <a3,a5>, <a3,a6>
关系有两种表示方法: 其一为"顺序映象"。以 "y 相对于 x 的存储位置" 表示 "y 是x的后继",例如,令 y 的存储位置和 x 的存储 位置之间相差一个预设常量C,C本身是个隐含值, 由此得到的数据存储结构为"顺序存储结构"。 其二为"链式映象"。以和x绑定在一起的附加信息(指针) 表示后继关系,这个指针即为 y 的存储地址,由此 得到的数据存储结构为"链式存储结构"。
数据结构的形式定义: 数据结构是一个二元组 Data_Structure=(D,S) D:数据元素的有限集。 S:D上关系的有限集。 (强调的是逻辑关系) 书上例1-4(P5)
数据的存储结构:如何在计算机上表示逻辑 结构或逻辑结构在存储器中的映像。 数据的映像方法:用二进制位(bit)的位串表示 数据元素。 (321)10=(501)8=(101000001)2 A (65 )10 = (101 )8=(001000001 )2 关系映像方法:用<x,y>有序对表示
行的次序关系: Row={<a1,a2>,<a2,a3>, <a4,a5>,<a5,a6>} 列的次序关系: Col={<a1,a4>,<a2,a5>, <a3,a6>}
例三:次序关系{<ai,ai+1> |i=1,2,3,4,5} 构成一维数组 不同关系构成不同的结构
四类关系: 1、集合,结构中的数据元素除了同属于一种类型外,别无 其它关系。 2、线性结构,结构中的数据元素之间存在一对一的关系。 3、树型结构,结构中的数据元素之间存在一对多的关系。 4、图状结构或网状结构,结构中的数据元素之间存在多对 多的关系。
在不同层次上讨论的算法有不同的描述方法,本课程讨论的数据结构和 算法为了使算法的描述和讨论简明清晰,容易被人理解,拟采用类C 语言(P8) ,它既不拘泥于某个具体的C语言,又容易转换成可以上 机调试的C程序或C++程序。 (1) 数据结构的表示(存储结构)都用类型定义 (typedef) 的方式描述。 基本数据元素类型约定为 ElemType,由用户在使用该数据类型时再 自行具体定义。 (2) 基本操作的算法都用以下形式的函数描述: 函数类型 函数名(函数参数表) { // 算法说明 语句序列 } // 函数名