C和数据结构北京大学(精)
数据结构与算法

数据结构与算法数据结构与算法是北京大学于2018年02月26日首次在中国大学MOOC开设的慕课课程,是国家精品在线开放课程。
该课程授课教师为张铭、陈斌、卢宗青、刘云淮、赵海燕、宋国杰、黄骏、邹磊、王腾蛟。
据2021年2月中国大学MOOC官网显示,该课程已开课4次。
数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、算法效率与度量、线性结构、顺序表、链表、栈与队列、栈与递归、递归转非递归、字符串的存储结构、字符串运算的算法实现、字符串的快速模式匹配、二叉树的抽象数据类型、二叉树的搜索、二叉树的存储结构、树与二叉树的等价转换、树的抽象数据类型及树的遍历、树的链式存储结构、树的父指针表示法、树的顺序存储和K叉树、图的概念和抽象数据类型、图的存储结构、图的遍历、内排序、检索等内容。
课程性质:课程背景计算机是现代社会中用于解决问题的重要工具,支撑这个工具高效运转的就是其后的各种系统程序、应用程序。
数据结构,是抽象的表示数据的方式;算法,则是计算的一系列有效、通用的步骤。
算法与数据结构是程序设计中相辅相成的两个方面,是计算机学科的重要基石。
课程定位数据结构与算法是介绍基本数据结构以及相关的经典算法,强调问题-数据-算法的抽象过程,关注数据结构与算法的时间空间效率,培养学生编写出高效程序从而解决实际问题的综合能力的一门课程。
适应对象数据结构与算法适合计算机以及相关理工专业的本科生学习。
对于具有C语言结构化程序设计基础的学生,该课程第0章补充了一些面向对象的基本内容。
课程简介:数据结构与算法围绕着“算法+数据结构=程序”的思路,以问题求解为导向进行学习,运用问题抽象、数据抽象、算法抽象来分析问题,应用适当的数据结构和算法来设计和实现相应的程序。
在求解实际问题方面,该课程会学习到通过权衡时空和其他资源开销,利用数据结构来组织数据、设计高效的算法、完成高质量的程序以满足错综复杂的实际应用需要。
课程所学到的内容会被利用到计算机科学后续的各个课程中,如操作系统、软件工程、数据库概论、编译技术、计算机图形学、人机交互等。
北大数据结构课件,内部资料,精品

栈的应用递归到非递归的转换张 铭 北京大学信息学院1内容提要递归函数调用原理 机械的递归转换 优化后的非递归函数 非递归的二叉树周游2张铭 北京大学信息学院递归函数示例void exmp(int n, int& f) { int u1, u2; if (n<2) f = n+1; else { exmp((int)(n/2), u1); exmp((int)(n/4), u2); f = u1*u2; } } 张铭3北京大学信息学院数学公式fu (n) ={n +1当n < 2时fu ( ⎣n / 2 ⎦)* fu ( ⎣n / 4 ⎦)n ≥ 2时}4张铭 北京大学信息学院函数调用及返回的步骤调用– 保存调用信息(参数,返回地址) – 分配数据区(局部变量) – 控制转移给被调函数的入口返回– 保存返回信息 – 释放数据区 – 控制转移到上级函数(主调用函数)5张铭 北京大学信息学院函数执行过程图解二叉树图解 Exmp(7,&f) f=u1*u2=4u1=f=2 u2=f=2 Exmp(3,&f) Exmp(1,&f) f=u1*u2=2u1=f=2 Exmp(1,&f)张铭u2=f=1 Exmp(0,&f)6北京大学信息学院用栈模拟递归调用过程后调用,先返回(LIFO),所以用栈rd=1: n=1 f=1 u1=? u2=? f=2 rd=2: n=0 f=? u1=? u2=? f=? rd=2: n=1 f=? u1=2 u2=1 rd=1: n=3 f=? u1=? u2=? f=2 u1=? u2=? rd=3: n=7 f=? u1=? u2=? u1=2 u2=2张铭7北京大学信息学院递归过程的模拟假设 void recfunc(p1, p2, p3,…,pk, pk+1, …, pm) 是一个递归函数void是无返回值型的函数,如果有返回值, 我们可以把返回值转换为一个引用型参数 其中参数p1, p2, p3,…,pk是值传递,参 数pk+1, …, pm是引用传递。
2019年北京大学软件与微电子学院软件工程考研招生目录、参考书笔记资料

2019年招生信息:育明教育徐老师备注解析:1.2019年软件工程计划招收人数全日制60人,接收推免人数12人。
2.2019年软件工程只有1个方向,考的内容政治、英语一、数学一、867计算机基础综合。
3.软件工程从名称来看就知道是偏向于技术的专业,毕业后很多学生都能去微软,亚马逊,腾讯,百度,阿里巴巴这种国外和国内一流的软件公司。
北大软微这个平台是很好的,技术类的校友资源也很丰富,北大的学位基本保证找工作时候不会因为学校不好被刷掉简历,有些地方可是只要北清复交的哦,剩下的就看个人素质了,有了平台,个人专业知识、表达能力过硬,再找些相关实习,考些证书,找个好工作是不成问题的。
总的来说呢,技术类的就业不输给任何大学的计算机学硕。
读博方面,因为软微大部分是专硕,不能直博,读博只能申请或者考博,但软微作为北大的学院给教授的印象好,申博士的时候会优先考虑。
学院也有一些出国交流的机会,对于出国读博的同学有利。
推荐使用参考书:软件工程官方指定参考书:《数据结构》(C语言版)严蔚敏清华大学出版社《计算机操作系统》汤子瀛西安电子科技大学出版社《计算机网络》谢希仁电子工业出版社历年招生复试分数线:2016年:50,45,80,80,2902017年:50,45,80,80,3002018年:50,45,80,80,300北京大学软件与微电子学院2018年硕士研究生招生复试通知根据北京大学研究生院的工作安排,并结合我院的具体情况,现将2018年硕士研究生复试阶段的工作安排说明如下:一、复试时间、地点:复试时间:3月12日-16日;(具体时间请查收邮件)复试地点:软件与微电子学院(大兴校区)(地址:北京市大兴工业开发区金苑路24号)。
(具体地点见复试通知书)乘车路线:1、北京站:地铁二号线宣武门站换乘地铁四号线高米店南站下车,C 口出站,在金星西路打车或者乘兴11路到福苑东区站下车,北行300米路东。
2、北京西站:地铁九号线国家图书馆站换乘地铁四号线高米店南站下车,C口出站,在金星西路打车或者乘兴11路到福苑东区站下车,北行300米路东。
华文慕课数据结构与算法(上)(北京大学)章节测验答案

解忧书店 JieYouBookshop第二章单元测试1、(1分)以下哪种结构是逻辑结构,而与存储和运算无关:Which of the following structure is a logical structure regardless of the storage or algorithm:(There is only one correct answer)A、队列(queue)B、双链表(doubly linked list)C、数组(array)D、顺序表(Sequential list)答案: A2、(1分)计算运行下列程序段后m的值:Calculate the value of m after running the following program segmentn = 9; m = 0;for (i=1;i<=n;i++)for (j = 2*i; j<=n; j++)m=m+1;求m的值答案: 203、(1分)下列说法正确的是:Which options may be correct?(there are more than one correct answers)A、如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)是O(h(n))【 if f(n) is O(g(n)),g(n) is O(h(n)),then f(n) is O(h(n))】B、如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)+g(n)是O(h(n))【if f(n) is O(g(n)),g(n) is O(h(n)),so f(n)+g(n) is O(h(n))】C、如果a>b>1,logan是O(logbn),但logbn不一定是O(logan)【if a>b>1,logan is O(logbn),logbn may not be O(logan)】D、函数f(n)是O(g(n)),当常数a足够大时,一定有函数g(n)是O(af(n))【if f(n)是O(g(n)),When constant a is big enough ,there must be g(n) is O(af(n))】答案: A,B4、(1分)由大到小写出以下时间复杂度的序列:答案直接写标号,如:(1)(2)(3)(4)(5) (提示:系统基于字符匹配来判定答案,所以您的答案中不要出现空格)Write the following time complexity in descending sequence:Write down the answer labels such as (1)(2)(3)(4)(5). (Hint:This problem is judged by string matching, Please make sure your answer don't contain any blanks. )RUX4%GXZNDD{IAQWTCSEEJG.png答案: (5)(1)(2)(4)(3)5、(1分)已知一个数组a的长度为n,求问下面这段代码的时间复杂度:An array of a, its length is known as n. Please answer the time complexity of the following code.(There are more than one answers.)for (i=0,length=1;i<n-1;i++){for (j = i+1;j<n && a[j-1]<=a[j];j++)if(length<j-i+1)length=j-i+1;}Screen Shot 2017-09-05 at 23.31.19.pngA、如图,A选项B、如图,B选项C、如图,C选项D、如图,D选项答案: A,B第三章单元测试1、(1分)下面关于线性表的叙述中,正确的是哪些?Which of the followings about linear list are correct?(There are more than one answers.)Select the answer that matchesA、线性表采用顺序存储,必须占用一片连续的存储单元。
2016北京大学计算机科学与技术(智能科学与技术)(信息科学技术学院)考研专业目录招生人数参考书目

更多资料请到易研官网 下载
棵哈夫曼树的是
A.24,10,5 和 24,10,7 B.24,10,5 和 24,12,7
C.24,10,10 和 24,14,11 D.24,10,5 和 24,14,6
4.现在有一颗无重复关键字的平衡二叉树(AVL 树),对其进行中序遍历可得到
书名 《计算机组成原理》
作者
出版社
唐朔飞 编 著
高等教育出版社年
《计算机组成原理学习指导与习题解 答》
唐朔飞 编 著
高等教育出版社
《数据结构(c 语言版)》
严蔚敏、吴 清华大学出版社
伟民编著
《计算机组成原理》
白中英 主 科学出版社
更多资料请到易研官网 下载
学科专业基
2,0,2,9,3,4,2,8,2,3,8,4,5,若进程要访问的下一页的页号为 7,依据 LRU 算
法,应淘汰页的页号是()
A.2 B.3 C.4 D.8
28.在系统内存中设置磁盘缓冲区的主要目的是()
A.减少磁盘 I/O 次数
B.减少平均寻道时间
C.提高磁盘数据可靠性
更多资料请到易研官网 下载
()
Ⅰ.S1 会限制用户申请资源的顺序
Ⅱ.S1 需要进行所需资源总量信息,而 S2 不需要
Ⅲ.S1 不会给可能导致死锁的进程分配资源,S2 会
A.仅Ⅰ Ⅱ B.仅Ⅱ Ⅲ C.仅Ⅰ Ⅲ D.Ⅰ Ⅱ Ⅲ
27 . 系 统 为 某 进 程 分 配 4 个 页 框 , 该 进 程 已 访 问 的 页 号 序 列 为
Ⅲ. 左规时可能引起阶码下溢
Ⅳ. 尾数溢出时结果不一定溢出
A.仅Ⅱ Ⅲ B.仅ⅠⅡⅣ C.仅ⅠⅢ Ⅳ D.ⅠⅡ Ⅲ Ⅳ
北大数据结构课讲义10

5
9.2.1 顺序查找
顺序表查找(Sequential Search)又称线性查找。
是一种最简单和最基本的查找方法。它从顺序表的一端 开始,依次将每个元素的关键字同给定值K进行比较,若某 个元素的关键字等于给定值K,则表明查找成功,返回该元 素所在的下标,若直到所有元素都比较完毕,仍找不到关 键字为K的元素,则表明查找失败,返回特定的值。
找成功时的平均查找长度(Average Search Length)。
n
ASL pici i 1
若查找每个数据元素的概率相等,则
1n
ASL ci
n i1
4
9.2 顺序表查找
顺序表 (Sequential List) 是指线性表的顺序存储结构。 ElemType A[MaxSize]; KeyType key;
28
9.4.4 散列表的运算
散列表的类型定义与所使用的冲突处理方法有关。 开放定址法
typedef ElemType hashlist1[HashMaxSize]; 链接法
typedef LNode* hashlist2[HashMaxSize];
(1)初始化散列表 (2)清空散列表 (3)向散列表中插入一元素 (4)从散列表中查找一元素 (5)从散列表中删除一元素
9
int Binsch (ElemType A[], int low, int high, KeyType K) {
int low=0, high=n-1; while (low<=high) {
int mid = (low+high)/2; if (K= =A[mid].key) return mid;
插入 K=31
北大数据结构课件,内部资料,精品

数据结构任课教员:张铭、赵海燕、冯梅萍、王腾蛟/mzhang/DS/北京大学信息科学与技术学院网络与信息系统研究所©版权所有,转载或翻印必究教学目的掌握常用的基本数据结构的ADT 及其应用学会合理地组织数据, 有效地表示数据, 有效地处理数据基本掌握算法的设计分析技术 提高程序设计的质量教学要求平时(考勤+作业)20% 上机(+报告)30%期中20%期末30%诚信端正学习态度、调动学习兴趣提倡讨论,但严禁抄袭可以讨论思路,请同学看算法的逻辑问题和效率问题。
但要亲自动手实现。
发现抄袭,则抄袭者和被抄袭者本次作业或上机题计双倍倒扣分,即得-20分。
以后的作业题会得到重点检查。
严重的期评将给予不及格处理数据结构教学计划和要求按时提交作业,严禁抄袭所有书面作业和上机作业都必须在指定的期限内完成并提交一般周三交书面作业。
除非不可抗拒的客观原因,请严格按提交时间完成书面作业和上机作业。
例如,一个满分为10分的作业题,记分标准为:(1)准时提交,满分可达10分(个别加分);(2)延迟3天之内提交,满分可达7分;(3)延迟7天之内提交,满分可达3分;(4)7天之后提交或不交,得分-5分。
(5)抄袭得–20分。
书面作业提交要求1) 写学号、名字2) 每次作业,都在作业本或电子稿的word文档中写上“我保证没有抄袭他人作业”的诚实保证。
否则,计零分或根据抄袭情况倒扣分。
3) 写算法分析、注释4) 算法中直接使用的函数、过程先写ADT,并说明函数功能、入口参数、出口参数5) 注意算法格式(层次嵌套、不同功能块之间留空)上机题提交要求上机作业提交时打一个zip包,学号+姓名+作业次数,如”00308096张宁1.zip”包中含有:1. readme.txt文件,把你的程序运行环境、编译运行步骤、程序功能等等简单说明一下。
2. 附加了诚实代码保证和足够注释的源程序以及相关的项目和资源文件。
例如,VC++中的.dsw, .dsp文件,rc目录中的图像资源文件;Jbuilder中的.jpr或.jpx文件,特殊的Java包等等。
第10章 搜索 数据结构(北师大)C++版

令
Δpi= ∑wj-∑wj
j=i+1
h
i-1
j=l
取最小值: Δpi=min{Δpj: l≤j≤h}
以ai为根, al+1,··,ai-1为左子树 ·· ··
右转:
65
p lc
13
38
将p作lc的右子结点
49
lc
13
65
10 10
p
38
左重加左——右转
结点p左重,还要加一个左结点 不平衡
右转:将p作lc的右子结点, 将lc的右子树接成p的左子树 p 38 lc lc
13 40 13
p
10
38
10
20 4 20 40
4
右重加右——左转
结点p右重,还要加一个右结点 不平衡
45 45
12 57
不 平 衡 8
平 衡
12
20
8
20
50
60
3
11
3
11
59
同一个数组的二叉排序树和二叉平衡树
20 30 80 40 10 60 50 70
49 20 49 30 13 65 10 49 30
80 27
40 13 10 97
20
40 13
49 60 13 65
80 27
60
50 50 97 70 49 70 49
以下序列中查找元素10的过程(比较4次) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x y
y x
存储结构只含数据元素本身 的信息,无附加信息
链式映象中,存储结构除数据 元素本身信息外,需要附加信息 指示存储位置
基本概念
算法 是能够解决某类问题的由若干指令组成的有限序
列。 一个算法可以用自然语言、程序设计语言或专门设计 的伪语言描述。 算法必须满足五个特性:
(1)有限性
(3)输入 (5)可行性
基本概念
算法的设计原则:
正确性 可读性 坚固性(健壮性) 高效率与低存储量需求
基本概念
正确性:说一个算法是正确的,是指对于一切合法的输 入数据,该算法经过有限时间(算法意义上的有限) 的执行都能产生正确(或者说满足规格说明要求)的 结果。 可读性: 可读性好的算法有助于设计者和他人阅读、理 解、修改和重用。晦涩难读的程序易于隐藏较多错误。 坚固性: 当输入数据非法时,算法能适当地作出合适的 反应。 高效率与低存储量需求:通常,效率指的是算法执行时 间;存储量指的是算法执行过程中所需的最大存储空 间,两者都与问题的规模有关。
基本概念
数据的存储结构
“数据元素”的映象 “关系”的映象
数据元素的映象方法 用二进制位(bit)的位串表示数据元素
(321)10 = (101000001)2 A = (001000001)2
基本概念
关系的映象方法
顺序映象 以相对的存储位置表示后继关系 链式映象 以附加信息(指针)表示后继关系
void mult(int a[][n], int b[][n], int(&c)[n][n] ) {
// 以二维数组存储矩阵元素,c 为 a 和 b 的乘积
for (i=0; i<n; ++i) for (j=0; j<n; ++j) { c[i][j] = 0; for (k=0; k<n; ++k) c[i][j] += a[i][k]*b[k][j]; } //for O(n3)
} //mult
基本概念
例子:
(a) x=x+1; O(1) (b) for(i=0; i<n; i++) x=x+1; (c) for(i=0; i<n; i++) for( j=0; j<n; j++) x=x+1; O (n) O (n2)
(2)确定性
(4)输出
基本概念
1.
2. 3. 4. 5.
有限性:任何一条指令都只能执行有限次,换句话说,算法必 须在执行有限步后结束。
确定性:算法中每条指令的含义必须明确,不允许有二义性, 对于相同的输入只能得出相同的输出。 输入:一个算法可以有零个或多个输入数据,这些输入数据取 自确定的对象集合。 输出:算法有一个或多个输出,这些输出是同输入有某个特定 关系的量。 可行性:算法中的所有操作都必须足够基本,都可以通过已经 实现的基本操作运算有限次实现之。
组成数据的基本单位。 是数据中的一个“个体”。 又称元素、记录、结点或者顶点。
数据项
数据元素由数据项组成。 是数据结构中讨论的最小单位。 又称域、字段。
姓名 王二 俱乐部名称 工人俱乐部
出生日期 参加日期 职务 1970-10-3 2000-9-10 会员
基本概念
数据结构
相互之间存在着某种关系的数据元素的集合。
基本概念
设L=( N, R )是一个逻辑结构,R={ r }, 若a, b∈N,且关系( a, b )∈r,
则:
称 a 是 b 的 前趋结点, 称 b 是 a 的 后继结点, 称 a 和 b 是 相邻结点, 如果不存在a∈N,使( a, b )∈r ,则称b为始结点, 如果不存在b∈N,使( a, b )∈r,则称a为终结点, 既非始结点又非终结点的结点被称为内结点。
事后统计法 必须执行程序 其它因素掩盖算法本质 事前分析估算法
基本概念
和算法执行时间相关的因素:
算法选用的策略 问题的规模 编写程序的语言 编译程序产生的机器代码的质量 计算机执行指令的速度 ——用绝对的时间单位衡量算法效率不合适
基本概念
撇开影响算法效率的软硬件因素,一个特定算法的
“运行工作量”的大小,只依赖于问题的规模(通常 用整数量n表示),或者说,它是问题规模的函数。 假如,随着问题规模 n 的增长,算法执行时间的增长 率和 f (n) 的增长率相同,则可记作:
T (n) = O( f (n) )
称T (n) 为算法的(渐近)时间复杂度。
பைடு நூலகம்
基本概念
算法 = 控制结构 + 基本运算 为了比较同一问题的不同算法,通常的做法是,从算 法中选取一些基本运算,以基本运算的重复执行次数 作为算法的时间量度。
数据结构(一)
常宝宝 北京大学计算机科学与技术系 chbb@
基本概念
数据
可以被计算机识别、存储和加工处理的符号的集合。 是计算机操作的对象的总称。 是信息的载体。
例子
数值计算程序(实数或整数) 编译程序(源程序) 图像处理程序(图像)
基本概念
数据元素
基本概念
数据的逻辑结构
线性结构 树形结构 图状结构 集合结构
基本概念
线性结构 结构中有且仅有一个始结点和一个终结点, 每个内结点有且仅有一个前趋结点和一个后继 结点。
非线性结构 结构中的结点可能有多个前趋结点和多个 后继结点。
基本概念
一行表示一个结点(元素),每个结点由学号、姓名、性别等九 个域(数据项)组成。 表的第一行是始结点;最后一行是终结点;中间的行都是内结点。 表的逻辑结构是线性结构。
逻辑结构
数据元素之间的逻辑关系。
存储结构
逻辑结构在存储器中的映象。
基本概念
数据的逻辑结构,可形式表示为二元组:
L = ( N, R )
其中 N 是结点的有限集合 R 是 N 上的关系集合
例子
L = ( N, R ) N = { a0, a1, a2 } R={r} r = { ( a0, a1 ), ( a0, a2 ) }
基本概念
目前不存在证明算法正确性的形式化方法 算法正确性的四个层次
程序中不含语法错误; 程序对于几组输入数据能够得出满足要求的结果; 程序对于精心选择的、典型、苛刻且带有刁难性的 几组输入数据能够得出满足要求的结果; 程序对于一切合法的输入数据都能得出满足要求的 结果;
基本概念
算法效率的衡量方法和准则 两种方法