_数据结构_教学与教材研究_张乃孝

合集下载

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书成都信息工程学院软件工程系2007年7月实验1:顺序表实验一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。

2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。

3.掌握对多函数程序的输入、编辑、调试和运行过程。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对顺序表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

三、实验内容:1.编写程序实现顺序表的下列基本操作:(1) 初始化顺序表La。

(2) 将La置为空表。

(3) 销毁La。

(4) 在La中插入一个新的元素。

(5) 删除La中的某一元素。

(6) 在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。

2.编写程序完成下面的操作:(1) 构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。

(2) 实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。

(3) 假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。

四、思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ?实验2:单链表实验一、实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。

2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。

二、实验要求1.预习C语言中结构体的定义与基本操作方法。

2.对单链表的每个基本操作用单独的函数实现。

3.编写完整程序完成下面的实验内容并上机运行。

三、实验内容1.编写程序完成单链表的下列基本操作:(1) 初始化单链表La。

(2) 在La中插入一个新结点。

(3) 删除La中的某一个结点。

(4) 在La中查找某结点并返回其位置。

西南交通大学考研网-易考网西南交通大学土木工程学院地图制图学与地理信息工程考研试卷列表--Easy考研网(ww

西南交通大学考研网-易考网西南交通大学土木工程学院地图制图学与地理信息工程考研试卷列表--Easy考研网(ww
2010年政治(暑期C班)徐汇班2010年考研英语辅导暑期班(荐) 优惠中
2010年英
2010年政治(B班)(冲刺班)
2010年政治(最后预测〈临门一脚〉A班)
2010年政治(最后预测〈临门一脚〉B班)
2009年博士研究生招生分数线
2009年博士考试报名须知
2009年博士研究生招生参考书目
2009年博士研究生招生专业目录
2010年政治(A班)(暑期班)
2010年政治(B班)(暑期班)
2010年考研政治暑期强化班(一班)
2010年考研政治暑期强化班(二班)
2008年硕士研究生招生现场确认的有关通知
2010年考研政治辅导暑期班 优惠中
2010年政治(A班)(暑期班)
2010年政治(B班)(暑期班)
2010年考研一证通--数学(强化班+冲刺班+考前解题技巧班)--数学一
2010年考研一证通--数学(强化班+冲刺班+考前解题技巧班)--数学二
2010年考研一证通--数学(强化班+冲刺班+考前解题技巧班)--数学三
2010年考研政治形式与政策精讲课程2班
2010年考研政治形式与政策精讲课程3班
2010年考研政治形式与政策精讲课程4班
2010年考研政治冲刺串讲课程1班
工商管理硕士(MBA)招生
2009年硕士研究生招生参考书目
2009年硕士研究生招生专业目录
西南交通大学招生问答 +More
考研政治暑期强化班2010年考研政治辅导秋季班 优惠中
2010年政治(B班)(秋季班)
2010年考研政治秋季强化班(一班)

Chap3算法与数据结构—C语言描述(第2版)张乃孝编课件

Chap3算法与数据结构—C语言描述(第2版)张乃孝编课件

E = ""
(注意区分空串""与空格串" "区别)
T = “ABBABBCA ” t= “ABB ABBCA ” (T和t不等) P= “BBC ” (P是T的子串,在T的位置是5)

子串:串中任意个连续的字符组成的子序列。 主串:包含子串的串相应地称为主串。 特别地,空串是任意串的子串。任意串s都是s本身的子 串。 除s本身之外,s的其它子串称为s的真子串。 位置:字符在序列中的序号。子串在主串中的位置则以 子串的第一个字符在主串中的位置来表示。 相等:两个串的长度相等,并且对应位置的字符都相等。
2 链接表示
在串的链接表示中,每个结点包含两个字段:字符和指 针,分别用于存放字符和指向下一个结点的指针。这样一个 串就可 用一个单链表来表示,其类型定义为:
struct StrNode; typedef struct StrNode *PStrNode; struct StrNode { char c; PStrNode link; }; typedef struct StrNode *LinkString; /* 链串的结点 */ /* 结点指针类型 */ /* 链串的结点结构 */
String concat (String s1, Sting s2 ) //返回将串s1和s2拼接在一起构成的一个新串。 String subStr (String s, int i, int j ) //在串s中,求从串的第i个字符开始连续j个字符所构成的子串。 int index (String s1, String s2 ) //如果串s2是s1的子串,则可求串s2在串s1中第一次出现的位置。 end ADT String
}

第1讲 数据结构 绪论

第1讲 数据结构 绪论
算法与数据结构设计
主Hale Waihona Puke 教师石连栓 软件教研室信息技术工程学院
课程安排
讲课学时: 讲课学时:36 参考书目: 参考书目
《算法与数据结构》 张乃孝主编. 高等教育出版社 算法与数据结构》 张乃孝主编 《数据结构》 数据结构》 严蔚敏等. 严蔚敏等 清华大学出版社
《计算机算法设计与分析》(第3版) 王晓东编著 电子工业出版社 计算机算法设计与分析》 第 版 《算法设计》 Jon KleinBerg Eva Tardos 著 张立昂 屈婉玲 译 清华大学出版社 算法设计》
逻辑结构划分方法二 一、集合 结构中的数据元素除了同属于一种 类型外,别无其它关系。 类型外,别无其它关系。 二、线性结构 结构中的数据元素之间存在一 对一的关系。 对一的关系。 三、树型结构 结构中的数据元素之间存在一 对多的关系。 对多的关系。 四、图状结构或网状结构 结构中的数据元素 之间存在多对多的关系。 之间存在多对多的关系。
18
存储结构 数据元素及其关系在计算机存储器中的存 储方式。 储方式。 是逻辑结构用计算机语言的实现, 是逻辑结构用计算机语言的实现,它依赖 于计算机语言。 于计算机语言。 存储结构两方面的内容 (1)数据元素自身值的表示(数据域) )数据元素自身值的表示(数据域) (2)该结点与其它结点关系的域(链域) )该结点与其它结点关系的域(链域)
首先,算法必须是“正确” 首先,算法必须是“正确”的 (1)执行算法所耗费的时间(效率要高 时间复杂度) 执行算法所耗费的时间( 时间复杂度) 执行算法所耗费的时间 效率要高,时间复杂度 (2)执行算法所耗费的存储空间( 主要考虑辅存空间 ; 执行算法所耗费的存储空间( 主要考虑辅存空间; 执行算法所耗费的存储空间 低存储要求,空间复杂度 空间复杂度) 低存储要求 空间复杂度) (3)算法的可读性、 易维护性要好 ( 易于理解 , 易于编 算法的可读性、易维护性要好(易于理解, 算法的可读性 易于调试) 码,易于调试) (4)健壮性, 即当输入一些非法数据时 , 算法也应做出 健壮性,即当输入一些非法数据时, 健壮性 适当的反应或进行处理。 适当的反应或进行处理。

安徽师范大学--计算机科学技术专业人才培养方案(教师教育类)

安徽师范大学--计算机科学技术专业人才培养方案(教师教育类)

数学计算机科学学院计算机科学技术专业人才培养方案(教师教育类)一、业务培养目标遵循“夯实基础、拓宽口径,增强能力,提高素质”的原则,培养学生具有良好的思想道德素质和身体心理素质、具有较好的文化素质和科学素养、具有较强的学习能力和实践能力,系统地掌握计算机硬件、软件和应用的基本理论、基本知识和基本技能与方法,熟练地进行程序设计,可使用数据库技术、网络技术和多媒体技术等解决实际问题,具备从事计算机教育、软件应用开发和相关工作的基本能力和素质,能在教育单位、科研部门、企业、事业、技术和行政管理部门等单位从事计算机教学、科学研究和应用的计算机科学与技术学科的高级专门科学技术人才。

二、业务培养要求本专业学生主要学习计算机科学与技术的基本理论、基本知识,受到应用计算机的基本训练和科学研究的初步训练,培养良好的教师职业素养,具备研究和开发计算机应用系统的基本能力。

通过本专业训练的毕业生应具有以下几方面的知识和能力:1、掌握计算机科学与技术基础理论、知识和技能,具有数据库、网络和多媒体等方面的应用能力;2、掌握计算机应用系统,特别是计算机教育系统的分析和设计的基本方法;3、具备良好的教师职业素养和专业素养,其中包括从事计算机(信息技术)教学的基本能力,熟悉教育法规,掌握教育学、心理学及计算机(信息技术)教学的基本理论,具有较强的语言表达能力、书面表达能力和教育教学管理能力;4、具有健康的体魄和良好的心理素质与卫生习惯,具有较强的集体合作和组织协调能力,具有现代社会的交往与沟通能力,具有良好的职业道德素养;5、具有熟练地进行程序设计和开发计算机应用系统的基本能力;6、了解计算机科学与技术的理论前沿,具有研究、开发新系统、新技术的初步能力;7、具有创新意识、创新精神和善于与人合作共事的品质和能力;具有一定的科学研究和实际工作能力。

三、学制与毕业学分学制:本专业标准学制为4年,实行弹性学制为3-6年学分:总学分不低于170+(6)学分四、授予学位授予工学学士学位五、课程设置与教学进程总体安排(一)计算机科学技术(教师教育)专业教学活动时间安排表(二)计算机科学技术(教师教育)专业课程类别和结构比例表(三) 计算机科学技术(教师教育)专业周学时计划分配表(四) 计算机科学技术(教师教育)专业课程设置与教学时间及学分分配表1、公共基础课程*公共基础课程由开课单位提交具体开课计划,课程编码由教务处统一编制。

Chap6_算法与数据结构—C语言描述(第2版)张乃孝编课件

Chap6_算法与数据结构—C语言描述(第2版)张乃孝编课件

例 表长为11的散列表中已填有关键字为17,60,29的记录, H(key)=key MOD 11,现有第4个记录,其关键字为38, 按三种处理冲突的方法,将它填入表中 0 1 2 3 4 5 6 7 8 9 10 38 38 60 17 29 38 (1) H(38)=38 MOD 11=5 H1=(5+1) MOD 11=6 H2=(5+2) MOD 11=7 H3=(5+3) MOD 11=8 冲突 冲突 冲突 不冲突

i 1
n
pici
n
n
ci
1
i 1
n
j2

n 1 n
log
2
( n 1 ) 1 log
2
( n 1) 1
j 1

散列查找
基本思想:在记录的存储地址和它的关键字之间 建立一个确定的对应关系;这样,不经过比较, 一次存取就能得到所查元素的查找方法 定义
9 80
10 88
11 92
比较次数: 查找第1个元素: 查找第2个元素: ………. 查找第n个元素: 查找第i个元素: 查找失败:
比较次数=5 1 2 n i n
顺序表查找程序实现
int seqSearch(SeqDictionary * pdic, KeyType key, int * position)


若k==r[mid].key,已查到 若k<r[mid].key,则high=mid-1,在表的前半部分继续查找 若k>r[mid].key,则low=mid+1,在表的后半部分继续查找

重复上述操作,直至low>high时,查找失败

[精品文档]数据结构-C语言描述(第三版)张乃孝

[精品文档]数据结构-C语言描述(第三版)张乃孝

数据结构-C语言描述(第三版)高等教育出版社,张乃孝第五章,二叉树与树1. 用三个结点A,B,C可以构成多少种不同的二叉树?0表示根结点,前一个1,2表示层数(1第一层,2第二层),后面的1,2.(1表示左子树,2表示右子树)层数为1的情况(11326C C=)A0B11C12,A0C11B12,B0A11C12,B0C11A12,C0A11B12,C0B11A12,层数为2的情况(1111322224C C C C=)A0B11C21,A0B11C22,A0B12C21,A0B12C22,A0C11B21,A0C11B22,A0C12B21,A0C12B22 B0A11C21,B0A11C22,B0A12C21,B0A12C22,B0C11A21,B0C11A22,B0C12A21,B0C12A22 C0A11B21,C0A11B22,C0A12B21,C0A12B22,C0B11A21,C0B11A22,C0B12A21,C0B12A22总计30种情况。

2先根次序周游 ABECFDGHIJKL中根次序周游EBFCDAIJKHGL后根次序周游EFDCBKJIHLGA4 .I(内部路径长度),E(外部路径长度),n(内部结点个数)n=12I=28E=I+2nE=528题后根次序周游 DGEBHJIFCA10根结点 a叶结点 efghd分枝结点 aca 度数3 层数0b度数1 层数1c度数3 层数1d度数0 层数1e,f,g,h度数0 层数21. 写一个算法来计算给定二叉树的叶结点数。

int num_of_leaves(BinTree t){if (t = = NULL) return 0; /*空树,返回0*/if (t->llink = = NULL && t->rlink = = NULL) return 1; /*根结点是树叶,返回1*/ return num_of_leaves(t->llink) + num_of_leaves(t->rlink);/*返回“左子树的叶结点数+右子树的叶结点数”*/ }村级财务工作总结[村级财务工作总结]我的岗位工作职责是负责现金收付、银行结算、货币资金的核算、开具增殖税发票和现金及各种有价证券的保管等重要任务,村级财务工作总结。

Chap4算法与数据结构—C语言描述(第2版)张乃孝编课件

Chap4算法与数据结构—C语言描述(第2版)张乃孝编课件
第四章 栈和队列
4.1 栈及其抽象数据类型
4.1.1. 定义
栈是限定在表尾进行插入或删除操作的线性表。表尾端称 栈顶,表头端称栈底。如图。 出栈 进栈 栈的修改是按后进先出 的原则进行的。 a 栈顶
n
... a2 a1
栈底
例1.一个栈的进栈序列是a,b,c,d,e,则栈不 可能的出栈序列是:
(A)edcba (B)decba (C) dceab (D)abcde
从pastack所指的栈中删除(或称弹出)一个元素。 当栈不空时,通过将栈顶变量减1达到元素删除的目的。 5. 取栈顶元素运算 程序实现
DataType top_seq( PSeqStack pastack )
当pastack所指的栈不为空栈时,将栈顶元素取出,而栈 本身未发生任何变化。
4.2.2链接表示
4.2 栈的实现
4.2.1顺序表示
typedef int DataType; /* 定义栈元素的数据类型, 这里定义为整型 */ struct SeqStack /* 顺序栈类型定义 */ { int MAXNUM; /* 栈中能达到的最大元素个数 */ int t; /*栈顶元素位置*/ DataType *s; }; typedef struct SeqStack * PSeqStack; D PSeqStack pastack;
typedef int DataType ; /* 定义栈中元素类型为整型, 也可定义为其他类型 */ struct Node; typedef struct Node * Pnode; struct Node /* 单链表结点结构 */ { DataType info; PNode link; }; struct LinkStack /* 链接栈类型定义 */ { PNode top; /* 指向栈顶结点 */ }; typedef struct LinkStack *PLinkStack ;

兰州大学参考书目

兰州大学参考书目

兰州大学2010年硕士研究生招生参考书目
说明:从2009年起,教育部提倡各招生单位不指定参考书目。

我校部分学院不再提供相关考试科目的参考书目。

考生可根据报考专业和考试科目自行选择相关参考书作为参考。

有一部分学院的参考书目还未上报,学院上报后我办会即时更新。

高等数学参考书目
011数学与统计学院参考书目
013物理科学与技术学院参考书目
016信息科学与技术学院参考书目
019化学化工学院参考书目
020生命科学学院参考书目
021资源环境学院参考书目
022草地农业科技学院参考书目
025大气科学学院参考书目
026土木工程与力学学院参考书目
027核科学与技术学院参考书目
031基础医学院参考书目
033口腔医学院参考书目
034公共卫生学院参考书目
035药学院参考书目
036第一临床医学院不提供参考书目037第二临床医学院不提供参考书目061文学院参考书目
062历史文化学院参考书目
064哲学社会学院参考书目
065外国语学院参考书目
066法学院不提供参考数目068经济学院参考书目
069管理学院参考书目
071新闻与传播学院参考书目
073政治与行政学院参考书目
075教育学院参考书目
076艺术学院参考书目。

清华大学本科计算机课程介绍

清华大学本科计算机课程介绍
本科生课程介绍
课号:00240013 学分: 3 课程名称 中文 课程属性:全校任选 英文 开课学期:秋、春 Fundamentals of Computer-aided Design 出版社 清华大学出版社 出版年月 2002 年 8 月
计算机辅助设计技术基础 书名 作者
使用教材
计算机辅助设计技术基 础教程
本课程是计算机科学与技术系为全校本科生开设的一门重要的计算机专业基础 课,目的是培养学生的软件工程素质,提高学生的软件开发能力。 本课程以软件生命周期的主要活动为主线,从软件及软件工程的历史和发展、软 件开发过程、需求分析、软件设计、程序编码、软件测试、软件维护、软件项目管理、 标准及规范等方面全面介绍软件工程的基本理论、方法、技术和工具。
课号: 30240273 课程名称
学分: 3 中文
课程属性:本科必修 开课学期: 春季 数据结构 书名 作者 英文 Data Structure 出版社 出版年月 1997
使用教材 参考书 讲课对象 课 程 简 介
数据结构(C 语言版)
严蔚敏,吴伟民 清华大学出版社
[1] Kruse, et.al. Data Structures & Program Desing in C. [2] Knuth. The Art of Computer Programming. Volume 1. 本科生 适用专业 工业工程系 先修课 C 语言程序设计
This course focuses on the basic concepts, principles, algorithms and applications of computer-aided design(CAD), it mainly consists of the following topics: software and hardware system of CAD, two-dimensional transformations, line clipping, raster display of 2D graphics, curves Introduction and surfaces, solid modeling, three-dimensional transformations, three-dimensional viewing, visible-surface determination, basic illumination models, and introductions to AutoCAD, 3DMAX 5.0 and OpenGL. It is an ideal choice for students who want to learn the rudiments of this dynamic and exciting CAD technology. 姓 名 讲 课 教 师 职称 主要教学和科研领域 主要教学领域: (1)承担全校计算机辅助设计技术基础 课教学; (2)承担研究生的小波分析及其应用课教学; 主要研究领域:小波分析及其应用,科学计算可视化, 计算机图形学,几何造型和图象处理。 (1)承担全校计算机辅助设计技术基础课教学

算法与数据结构C语言描述(第2版)电子教案-作者 张乃孝第1章 绪论

算法与数据结构C语言描述(第2版)电子教案-作者 张乃孝第1章 绪论

1.3.1什么是数据结构
• (通常)可以把数据结构理解为: 计算机中表示(存储)的、具有一定(逻辑)关 系和行为的一组数据。 其中的每个数据(元素)称为这个结构的一个结点。 • (根据面向对象的观点)可以把数据结构理解成 为抽象数据类型的物理实现。 主要解决两个问题: 如何具体表示抽象数据类型中的数学模型; 如何给出抽象数据类型中需要操作的实现。
抽象的着色算法
• int colorUp(Graph G) • { int color = 0; //记录使用的颜色数 • set V1 = G.V; //V1初始化为图G的结点集V • set NEW; • while(!isEmpty(V1)) • { NEW = {}; • while (v V1. notAdjacentWith(NEW, v, G)) • { add(NEW,v); remove(V1,v); } • ++color; • } • return color; //返回使用的颜色数 • }
• • • •
假设需要着色的图是G, G中所有结点的集合记为G.V, 集合V1存放图中所有未被着色的结点, 集合NEW存放可以用某颜色着色的所有 结点。
贪心法的描述
• 从V1中找出可用新颜色着色的结点集的工作可以用 下面的伪码描述: 置NEW为空集合; for 每个v V1 do if v与NEW中所有结点间都没有边 从V1中去掉v ; 将v加入NEW ;
• 为了便于给出上述算法的实现,可以按 照抽象数据类型的观点,先把被处理的 对象加以抽象。 • 在着色问题中具 的抽象数据类型表示一组国家等。
抽象数据类型的选择
• 使用一个图(图是图论研究的对象,也 是一种重要的抽象数据类型。)表示地 图。 • 使用国名(图中结点名)的集合表示国 家的分组。

河海大学2020硕士研究生招生考试自命题科目参考范围

河海大学2020硕士研究生招生考试自命题科目参考范围

2020年硕士研究生招生考试自命题科目参考范围说明:按照教育部规定,学校不提供考试科目参考书,以下书籍仅供参考。

科目代码科目名称参考范围003无机化学请参考相应的本科专业通用教材。

008社会保障基金管理《社会保障基金管理新论》殷俊、赵伟著,武汉大学出版社,2006年。

015新闻传播综合业务新闻传播类参考书同初试参考书目。

024政治学原理(2)《政治学概论》(第二版),孙关宏等主编,复旦大学出版社,2008年。

025生态学请参考相应的本科专业通用教材。

047社会工作概论请参考相应的本科专业通用教材,考试范围为相关领域本科阶段专业基础课的基本知识点。

050地球科学概论《地球科学导论》刘本培等编,高等教育出版社,2000。

211翻译硕士英语请参考相应的本科专业通用教材。

243日语(二外)新版《标准日本语》(初级上、下册)人民教育出版社和光村图书株式会社。

245法语(二外)《法语》第一、二、三册的前八课马晓宏等编(92年版),外语教学与研究出版社。

246法语请参考相应的本科专业通用教材。

247德语(二外)《大学德语》(共4册)高教出版社;考研参考范围1、2、3册为主。

331社会工作原理全国MSW考试专业课考试大纲的基础上,参考下列书籍:《社会工作概论》(第二版),李迎生,中国人民大学出版社,2010年;《社会工作理论》,何雪松,上海人民出版社,2007年。

357英语翻译基础请参考相应的本科专业通用教材。

432统计学《统计学》(第五版),贾俊平,中国人民大学出版社,2014。

科目代码科目名称参考范围437社会工作实务全国MSW考试专业课考试大纲的基础上,参考下列书籍:《个案工作》,许莉娅,高等教育出版社,2004年;《小组工作》,刘梦,高等教育出版社,2004年;《社区工作》,徐永祥,高等教育出版社,2004年;《社会研究方法》(第五版),风笑天,中国人民大学出版社,2018年。

448汉语写作与百科知识请参考相应的本科专业通用教材。

Chap1-算法与数据结构—C语言描述(第2版)张乃孝编课件

Chap1-算法与数据结构—C语言描述(第2版)张乃孝编课件
ADT 抽象数据类型名{ 数据对象:{数据对象定义} 数据关系:{数据关系定义} 基本操作:{基本操作定义}
}ADT 抽象数据类型名
复数抽象数据类型示例
复数抽象数据类型 ADT Complex {
数据对象:D = {c1, c2 | c1, c2 R(R为实数集)} 数据关系:S = {<c1, c2> ( c1为实部,c2为虚部)} 基本操作:
数据对象(Data Object):相同特性数据元素 的集合,是数据的一个子集合。
基本概念和术语
• 数据结构:相互之间存在一种或多种特定关
系的数据元素的集合。
根据数据元素间关系的基本特性,有四种基本数据结构 (集合)——数据元素间除“同属于一个集合”外,无其它关系 线性结构——一个对一个,如线性表、栈、队列 树形结构——一个对多个,如树 图状结构——多个对多个,如图
长利 4
3 太华
2 1
桦南
发生疫情的五个村子
v
5
1
v 53
3
7
2
24
1
v 42
v
1v
4
3
村子联系网络
穷举法 贪心算法
0 1 2 7 5 1 0 4 4 3 2 4 0 1 2 7 4 1 0 3 5 3 2 3 0
耗时矩阵
数据结构
是一门研究非数值计算的程序设计问题中,计 算机操作的对象以及它们之间的关系和操作的 学科
void Assign(*A, c1, c2) void Add(*A, B) void Minus(*A, B) void Multiply(*A, B) void Divide(*A, B) ... }ADT Complex
复数抽象数据类型的C语言实现

“数据结构”教学与教材研究

“数据结构”教学与教材研究

“数据结构”教学与教材研究摘要:本文回顾了著者三十多年来从事“数据结构”教学与研究的主要经历,重点介绍了对该课程的教材建设方面的主要工作,指出与时俱进、精益求精地编写教材是提高教学水平的基础和关键。

【关键词】:^p :数据结构;算法;程序设计语言;程序设计方法;教材一、前言194年2月14日,世界上第一台电子数字计算机ENIAC在美国宾夕法尼亚大学诞生。

早期计算机主要用于数值计算,处理的对象是“无结构”的数据(例如整数和浮点数),它们和处理这些数据的程序(根据计算机指令系统编写的代码)都采用二进制表示形式存储在计算机的存储器中。

20世纪50年代开始的“程序设计语言”研究,改变了原始的使用机器语言编程的方式,语言的“使用手册”给计算机的使用者提供了一个非常高级的“虚拟机”,使得程序员可以方便快捷地描述需要的数据和处理数据的程序;然后通过语言的“编译器”把它们成功地转换为计算机内部的二进制代码。

高级语言的研究成果,打破了计算机只能进行科学计算的限制。

“语言编译系统”通过计算机成功地完成从高级语言的模型到计算机硬件语言模型的转换,打开了计算机系统软件研究的大门;同时也提出许多相对比较复杂的结构化数据的需求(例如栈、散列表和二叉树等),促进了数据结构的研究和发展。

“数据结构”的概念最早是由C.A.R.Hoare和N.Wirth在196年提出。

大量关于程序设计理论的研究表明:为了系统而科学地构造大型复杂的程序,必须对这些程序中所包含的数据结构进行深入的研究。

1968年,美国教授D.E.Knuth在他的名著《计算机程序设计技巧》(第1卷基本算法第二章信息结构)中首次系统地研究并整理了当时经常使用的主要数据结构与相关的算法,为数据结构课程的开设提供了丰富的素材(他本人也因此书的成就,在1974年获得计算机界最高科学成就奖“图灵奖”)。

自20世纪70年代起,“数据结构”在西方国家的大学中,被普遍列为计算机本科的必修课程。

Chap6算法和数据结构—C语言描述(第2版)张乃孝编

Chap6算法和数据结构—C语言描述(第2版)张乃孝编
其中:Rhi——不同旳散列函数 特点:计算时间增长
链地址法
措施:将全部关键字为同义词旳统计存储在一种单链表中, 并用一维数组存储头指针
定义
散列函数——在统计旳关键字与统计旳存储地址之间 建立旳一种相应关系叫哈希函数
散列函数是一种映象,是从关键字空间到存储地 址空间旳一种映象
散列函数可写成:addr(ai)=H(ki) ai是表中旳一种元素 addr(ai)是ai旳存储地址 ki是ai旳关键字
关键字 hash 存储地址
5 13 19 21 37 56 64 75 80 88 92
low
mid
123456 7 5 13 19 21 37 56 64
high
8 9 10 11 75 80 88 92
low
mid
high
1 2 3 4 5 6 7 8 9 10 11
5 13 19 21 37 56 64 75 80 88 92
/* 检索成功 */
else if(pdic->element[mid].key>key)
high=mid-1;
/* 要检索旳元素在左半区 */
else low=mid+1;
/* 要检索旳元素在右半区 */
}
*position=low; return(0);
/* 检索失败 */
}
分析
二分法检索每经过一次比较就将检索范围缩小二分之一,第i次比较 可能比较旳元素个数如下表∶
折叠法
构造:将关键字分割成位数相同旳几部分,然后取这几部分 旳叠加和(舍去进位)做散列地址
种类
移位叠加:将分割后旳几部分低位对齐相加
间界叠加:从一端沿分割界来回折送,然后对齐相加

Chap3_算法与数据结构—C语言描述(第2版)张乃孝编课件

Chap3_算法与数据结构—C语言描述(第2版)张乃孝编课件

3.2 字符串的实现

顺序表示 链接表示

1 顺序表示
字符串的顺序表示,就是把串中的字符,顺序地存储在一 组地址连续的存储单元中。其类型定义为: struct SeqString { /* 顺序串的类型 */ int MAXNUM; /* 串允许的最大字符个数 */ int n; /* 串的长度,nMAXNUM */ char *c; }; typedef struct SeqString *PSeqString;
算法3.3 创建空链串
LinkString createNullStr_link( ) { LinkString pst; pst=(LinkString)malloc(sizeof(struct StrNode )); if( pst != NULL ) pst->link =NULL; return (pst); }
else
return(s1); if (p==NULL) return(s1); t = (PStrNode)malloc(sizeof(struct StrNode)); s1->head = t; for (k=1;k<=j;k++) /*连续取j个字符*/ { t->c = p->c; if (p->link!=NULL && k<j) { q=(PStrNode)malloc(sizeof(struct StrNode)); p = p->link; t->link = q; t = q; } else break; } t->link = NULL; return(s1);
2 抽象数据类型
ADT String is operations String createNullStr (void) int IsNullStr ( String s )
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中国大学教学 2013年第2期86 张乃孝,北京大学数学学院教授。

“数据结构”教学与教材研究张乃孝摘要:本文回顾了著者三十多年来从事“数据结构”教学与研究的主要经历,重点介绍了对该课程的教材建设方面的主要工作,指出与时俱进、精益求精地编写教材是提高教学水平的基础和关键。

关键词:数据结构;算法;程序设计语言;程序设计方法;教材一、前言1946年2月14日,世界上第一台电子数字计算机ENIAC在美国宾夕法尼亚大学诞生。

早期计算机主要用于数值计算,处理的对象是“无结构”的数据(例如整数和浮点数),它们和处理这些数据的程序(根据计算机指令系统编写的代码)都采用二进制表示形式存储在计算机的存储器中。

20世纪50年代开始的“程序设计语言”研究,改变了原始的使用机器语言编程的方式,语言的“使用手册”给计算机的使用者提供了一个非常高级的“虚拟机”,使得程序员可以方便快捷地描述需要的数据和处理数据的程序;然后通过语言的“编译器”把它们成功地转换为计算机内部的二进制代码。

高级语言的研究成果,打破了计算机只能进行科学计算的限制。

“语言编译系统”通过计算机成功地完成从高级语言的模型到计算机硬件语言模型的转换,打开了计算机系统软件研究的大门;同时也提出许多相对比较复杂的结构化数据的需求(例如栈、散列表和二叉树等),促进了数据结构的研究和发展。

“数据结构”的概念最早是由C. A. R. Hoare和N. Wirth 在1966年提出。

大量关于程序设计理论的研究表明:为了系统而科学地构造大型复杂的程序,必须对这些程序中所包含的数据结构进行深入的研究。

1968年,美国教授D.E.Knuth在他的名著《计算机程序设计技巧》(第1卷基本算法第二章信息结构)中首次系统地研究并整理了当时经常使用的主要数据结构与相关的算法,为数据结构课程的开设提供了丰富的素材(他本人也因此书的成就,在1974年获得计算机界最高科学成就奖“图灵奖”)。

自20世纪70年代起,“数据结构”在西方国家的大学中,被普遍列为计算机本科的必修课程。

二、不同时期的教材1978年著者已有10年从事系统软件开发的丰富经验,参加了北京大学计算机系的筹备和创建。

在担任数据库教研组组长期间,按系主任张士龙教授的安排,负责“数据结构”等新课的建设。

从此围绕数据结构开展的工作,包括学习与研究、讲课与编写教材等,三十多年一直没有停息。

其中花费时间和精力最多的是根据教学和科研的需要编写了下面4本教材(以8种不同版本出版)。

1.第一本教材:《数据结构》1979年教育部在南京大学召开了第一次全国计算机系教学大纲研讨会,著者带着起草的“数据结构教学大纲”和“数据库教学大纲”与系主任一起参加了会议。

会上充分肯定了我们的工作,并建议我们分工负责编写数据结构教材。

根据这个大纲的修改稿,著者组织教研组内的老师共同编写了第一本《数据结构》讲义。

1980年起,这本讲义在校内外(包括南京大学、中山大学等国内著名高校)广泛试用,三易其稿。

1987年由高等教育出版社正式出版(此书1992年获国家教委颁发的全国优秀教材奖)。

2.第二本教材:《数据结构基础》1985年,“北京市自学考试委员会”开设计算机专业。

作为数据结构课程的考试委员,著者邀请杨冬青和邵维忠两位老师共同编写了这本自学考试教材。

1991年由北京大学出版社出版,第二年台湾儒林出版公司用繁体字出版。

3.第三本教材:《数据结构——C++与面向对象的途径》20世纪90年代,面向对象的语言和方法开始流行。

根据教学和科研的需要,著者与裘宗燕老师合作编写了该教材。

1998年作为国家“九五”重点教材由高等教育出版社出版,2001年出修订版。

4.第四本教材:《算法与数据结构》1998年,著者由北京大学校长聘任,主持全校理科主干基础课“算法与数据结构”,考虑到不同专业的需要,组织理科教师共同编写了一本适合理科各专业通用的新教材。

该书列为“面向21世纪教材”,2002年由高等教育出版社出版,获评“北京市高等教育精品教材”;2006年出第二版,列为“十一五”国家级规划教材,获评教育部“普通高等教育精品教材”;2012年再次修改并附著者教学光盘,出第三版。

回顾三十多年来围绕数据结构教学方面的工作,深深体会到与时俱进、精益求精地编写教材是提高教学水平的基础和关键。

三、数据结构教材需要与时俱进计算机科学是一门高速发展的新兴科学,它的研究内容和研究方法都在不断发展。

“结构”可以解释为:(1)把某些成分(成员、元素、原子等)按一定的规律或方式组织在一起的实体;或(2)把某些成分组织在一起的方式。

“数据结构”从字面上可以理解为就是以数据为成员的结构。

在早期关于数据结构的论文中,一个数据结构多数情况下是指一个“实体”,而不是指“方式”。

用通俗的程序语言的术语来讲,一个数据结构就可以看成一个结构化的数据。

然而,计算机科学研究数据结构的目的是为了在计算机中有效地表示和处理客观世界的各种不同对象。

所以我们关心的是这些数据结构如何存储在计算机中,并且能有效地完成各种需要的操作。

随着计算机科学的发展,对于数据结构的教学与研究也逐步从“实体”,提高到“方式”,直到“抽象数据类型的实现”。

1.教材应该正确反映计算机科学的发展水平前面提到的第一本教材,基本反映了20世纪70年代的认识水平。

当时数据结构的许多概念还十分模糊,即使像“栈”和“队列”这些最基本的结构,它们的操作定义都不完全统一。

许多教材对于什么是“数据结构”都没有解释。

我们考察了20世纪70年代有影响的几本著作。

其中H. A. Maurer用一个二元组B=〈K,R〉来形式地定义一个数据结构B,其中K是结点有限集合,而R是K上的关系的有限集合。

C. C. Gotlieb和L. R. Gotlieb则将数据结构的定义扩充成一个五元组:〈V,O,G,M,S〉。

其中V是所讨论的结构中成员取值的集合,O是结构中成员可执行的运算的集合,G是两个构成名字的文法,M是结构中各成员存放位置的集合,S是L(G) M的映射。

根据数据结构研究的目的和应用的需要,我们认为提到一种数据结构离不开以下三个方面:(1)构成数据结构的成员之间固有的逻辑关系;(2)将数据存储在计算机中的表示方法;(3)在计算机中对数据结构进行的运算或处理。

将这三方面分别简称为数据的逻辑结构、存储结构和运算,所以在第一本教材中我们明确采用这三者的统一(三位一体)来非形式地定义“数据结构”的概念。

第二本《数据结构基础》以上一本教材内容为基础,根据N. Wirth教授提出的“算法+数据结构=程序”关系,把程序理解为在数据的某些特定的结构和表示的基础上对于算法的描述。

算法与数据结构是程序设计中相辅相成、不可分割的两个方面。

为了适合于自学考试大纲的要求,参考了A. V. Aho教授20世纪80年代的教材,采用以数据结构为主线、算法为辅线的结构编写,使得内容更加紧凑、重点更加突出。

第三本教材《数据结构——C++与面向对象的途径》是在面向对象的语言和方法开始流行的20世纪90年代,采用面向对象的设计方法讲解数据结构的内容。

参考Budd 的工作,由简到繁、从易到难,系统地引入各种抽象数据类型的概念和实现,并在全书最后,用类图方式总结了各种经典的抽象数据类型在教材中的相互关系。

最后一本《算法与数据结构》参考了Kurt Mehlhorn 等人的观点,把“数据结构”定义为“抽象数据类型的物理实现”。

提出“物理实现”的意图是强调本课程关心的“实现”应具体到可以用计算机的两个最重要的物理量(主机的运行时间和内存的存储空间)来权衡。

这一观点突出了抽象数据类型在数据结构教学中的地位,包含了数据结构与面向对象技术的内在联系。

使读者可以从更高的层次理解数据结构与算法的关系,也容易解释数据的逻辑结构、存储结构与运算的三者关系。

后两本教材都反映了20世纪90年代的理解水平。

其共同之处是:都强调了数据结构是“抽象数据类型的实现”,前一本使用的是面向对象的实现方法,而后一本为了突出讲解实现的物理效率,没有采用面向对象的方法。

2.教材内容既要相对稳定又要逐步更新需要指出的是,尽管计算机科学的发展使得数据结构的地位和作用产生了许多变化,但是数据结构学习的目的并没有大的改变。

所以教材的内容是基本稳定的。

第一本教材按“逻辑结构、存储结构、运算和应用”四个层次的结构组建架构。

全书共18章,除第一章概论外分为四大部分:第一部分是线性结构,包括顺序表、链表与动态存储管理、串、内排序和线性表的检索等五章;第二部分是树形结构,包括树形结构的概念、树形结构的存87储、二叉树周游算法、树目录和树形结构的其他应用等五章;第三部分是复杂结构,包括图和多维数组与广义表两章;第四部分是文件结构,包括顺序文件、散列文件、索引顺序文件、倒排文件和外排序等五章。

全书概念清楚、内容丰富、体系完整。

第二本作为自学考试教材,内容在第一本的基础上加以精简,并增加集合与字典结构,把检索归入集合的基本运算。

在结构上更加强调基础、突出重点、适合自学。

全书共分8章。

第一章通过分析一个实际问题的求解过程,引入抽象数据类型、数据结构和算法等重要概念作为全书的引论;第二章到第五章分别讨论了表、树、集合和图等常见的各种数据结构,一般均以抽象数据类型引路,重点讨论抽象数据类型在计算机中各种不同的实现方法;第六章对链接表示所需要的动态存储管理问题作了系统的阐述;第七章综述了外存上数据结构的各种组织方式;第八章给出内排序和外排序的各种算法。

第三本由于采用了面向对象的方法,在内容上做了较大调整。

增加了面向对象的方法入门和优先队列。

全书共分12章:第一章,绪论;第二章,C++与面向对象初步;第三章,字符串,本章定义了一种更安全可靠的字符串类型,同时也以字符串做例子,讨论数据抽象和封装的有关问题;第四章,向量,本章建立了一种安全可靠的向量数据类型,还给出了几个主要的向量排序算法;第五章,动态数据结构——链表,主要讨论了各种常用的链表结构及其实现方法;第六章,栈和队列,介绍了栈和队列的抽象概念、具体实现及其应用;第七章,树和二叉树,介绍了树和二叉树的概念,重点介绍二叉树的实现及树结构用于快速检索的一些技术;第八章,优先队列,主要介绍了堆和斜堆的概念以及通过它们实现优先队列的方法;第九章,集合和字典;第十章,散列表;第十一章,图;第十二章,文件。

在附录中用类图方式给出本书介绍的主要抽象数据类型及其相互关系图。

第四本书作为北京大学主干课“算法与数据结构”的通用教材。

全书共分以下10章。

第一章绪论;第二章线性表;第三章字符串;第四章栈与队列;第五章二叉树与树;第六章集合与字典;第七章高级字典结构;第八章排序,第九章图;第十章算法分析与设计,主要给读者概括地介绍算法的分析和设计的主要技术。

相关文档
最新文档