北大考题(数据结构与算法)

合集下载

数据结构与算法分析习题与参考答案

数据结构与算法分析习题与参考答案

大学《数据结构与算法分析》课程习题及参考答案模拟试卷一一、单选题(每题 2 分,共20分)1.以下数据结构中哪一个是线性结构?( )A. 有向图B. 队列C. 线索二叉树D. B树2.在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下( )语句序列。

A. p=q; p->next=q;B. p->next=q; q->next=p;C. p->next=q->next; p=q;D. q->next=p->next; p->next=q;3.以下哪一个不是队列的基本运算?()A. 在队列第i个元素之后插入一个元素B. 从队头删除一个元素C. 判断一个队列是否为空D.读取队头元素的值4.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( )个不同的字符串?A.14B.5C.6D.85.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。

以下6-8题基于图1。

6.该二叉树结点的前序遍历的序列为( )。

A.E、G、F、A、C、D、BB.E、A、G、C、F、B、DC.E、A、C、B、D、G、FD.E、G、A、C、D、F、B7.该二叉树结点的中序遍历的序列为( )。

A. A、B、C、D、E、G、FB. E、A、G、C、F、B、DC. E、A、C、B、D、G、FE.B、D、C、A、F、G、E8.该二叉树的按层遍历的序列为( )。

A.E、G、F、A、C、D、B B. E、A、C、B、D、G、FC. E、A、G、C、F、B、DD. E、G、A、C、D、F、B9.下面关于图的存储的叙述中正确的是( )。

A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关10.设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果?( )A. a,g,h,m,n,p,q,x,zB. a,g,m,h,q,n,p,x,zC. g,m,q,a,n,p,x,h,zD. h,g,m,p,a,n,q,x,z二、填空题(每空1分,共26分)1.数据的物理结构被分为_________、________、__________和___________四种。

北大计算机专业考研题库

北大计算机专业考研题库

北大计算机专业考研题库
北大计算机专业考研题库涵盖了计算机科学与技术领域的多个重要知
识点,包括但不限于数据结构、计算机组成原理、操作系统、计算机
网络、软件工程等。

以下是一些模拟题目,供参考:
# 一、选择题
1. 在数据结构中,以下哪个算法的时间复杂度是O(n^2)?
A. 冒泡排序
B. 快速排序
C. 归并排序
D. 堆排序
2. 在计算机组成原理中,以下哪个部件不参与指令的执行?
A. CPU
B. 内存
C. 硬盘
D. I/O设备
# 二、简答题
1. 简述冯·诺依曼计算机体系结构的主要特点。

2. 解释操作系统中的死锁概念,并列举导致死锁的四个必要条件。

# 三、计算题
1. 给定一个具有n个元素的数组,编写一个函数来实现快速排序算法,并计算其平均时间复杂度。

# 四、编程题
1. 编写一个程序,实现单链表的反转,并输出反转后的链表。

# 五、论述题
1. 论述计算机网络中的TCP/IP协议栈,并解释各层的功能。

# 六、案例分析题
1. 假设你是一名软件工程师,你的团队正在开发一个大型在线多人游戏。

请分析可能遇到的性能瓶颈,并提出优化策略。

请注意,以上题目仅为示例,实际的考研题库会更加全面和深入,包
括更多的题型和知识点。

考生在准备考研时,应广泛阅读教材、参考
书和历年真题,以确保对各个知识点有充分的理解和掌握。

考研是一个系统性的过程,需要考生有计划地复习,不断练习和总结。

希望每位考生都能够取得理想的成绩,实现自己的学术目标。

祝所有考生考研顺利!。

2022年北京大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年北京大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年北京大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为()排序法。

A.插入B.选择C.希尔D.二路归并2、下列排序算法中,占用辅助空间最多的是()。

A.归并排序B.快速排序C.希尔排序D.堆排序3、计算机算法指的是解决问题的步骤序列,它必须具备()三个特性。

A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性C.确定性、有穷性、稳定性D.易读性、稳定性、安全性4、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()。

A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都可能要修改D.队头、队尾指针都要修改5、下列关于AOE网的叙述中,不正确的是()。

A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动若提前完成,那么整个工程将会提前完成6、下列叙述中,不符合m阶B树定义要求的是()。

A.根结点最多有m棵子树 B.所有叶结点都在同一层上C.各结点内关键字均升序或降序排列 D.叶结点之间通过指针链接7、排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。

下列排序方法中,每一趟排序结束时都至少能够确定一个元素最终位置的方法是()。

Ⅰ.简单选择排序Ⅱ.希尔排序Ⅲ.快速排序Ⅳ.堆排Ⅴ.二路归并排序A.仅Ⅰ、Ⅲ、Ⅳ B.仅Ⅰ、Ⅱ、Ⅲ C.仅Ⅱ、Ⅲ、Ⅳ D.仅Ⅲ、Ⅳ、Ⅴ8、一个具有1025个结点的二叉树的高h为()。

A.11B.10C.11至1025之间D.10至1024之间9、有n(n>0)个分支结点的满二叉树的深度是()。

A.n2-1B.log2(n+1)+1C.log2(n+1)D.log2(n-l)10、在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A 的左孩子的平衡因子为0,右孩子的平衡因子为l,则应作()型调整以使其平衡A.LLB.LRC.RLD.RR二、填空题11、N个顶点的连通图用邻接矩阵表示时,该矩阵至少有______个非零元素。

计算机科学与技术专业知识考题

计算机科学与技术专业知识考题

计算机科学与技术专业知识考题计算机科学与技术专业是目前社会发展中最炙手可热的专业,拥有广阔的就业前景和发展空间。

在计算机科学与技术专业的学习过程中,掌握并熟悉相关专业知识是非常重要的。

本文将介绍一些计算机科学与技术专业的知识考题,帮助大家更好地了解和掌握这一领域的知识。

一、数据结构与算法数据结构与算法是计算机科学与技术专业中的基础考题。

下面是一道关于排序算法的题目:题目:请简要介绍冒泡排序算法,并给出其时间复杂度和空间复杂度。

解析:冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个相邻的元素,并根据大小进行交换。

时间复杂度为O(n^2),空间复杂度为O(1)。

二、计算机网络计算机网络是计算机科学与技术专业中的重要知识点。

下面是一道关于网络协议的题目:题目:请简要介绍TCP/IP协议族,并说明其各层的功能。

解析:TCP/IP协议族是计算机网络中最重要的协议之一,它包括四层:网络接口层、网络层、传输层和应用层。

网络接口层负责物理连接的建立和维护,网络层负责数据包的传输和路由选择,传输层负责数据的可靠传输,应用层负责实现各种网络应用。

三、操作系统操作系统是计算机科学与技术专业中的核心知识。

下面是一道关于进程调度的题目:题目:请简要介绍先来先服务(FCFS)调度算法,并说明其特点。

解析:先来先服务调度算法是一种非抢占式的进程调度算法,即按照进程到达的顺序进行调度。

特点是简单、公平,但容易导致“饥饿”现象,即长作业等待时间长。

四、数据库数据库是计算机科学与技术专业中与数据存储和管理相关的重要知识。

下面是一道关于关系数据库的题目:题目:请简要介绍关系数据库的特点,并说明关系数据库的一些术语。

解析:关系数据库的特点包括数据的结构化、数据的共享和数据的完整性。

关系数据库的一些术语包括表(Table)、行(Row)、列(Column)、主键(Primary Key)和外键(Foreign Key)等。

数据结构与算法(Python版)《数据结构》参考答案(A卷)

数据结构与算法(Python版)《数据结构》参考答案(A卷)

数据结构与算法(Python版)《数据结构》参考答案(A卷)数据结构与算法是计算机科学中非常重要的基础知识,它们在软件开辟中起着至关重要的作用。

在Python编程语言中,数据结构与算法同样扮演着重要的角色。

本文将介绍数据结构与算法在Python中的应用,匡助读者更好地理解和运用这些知识。

一、数据结构1.1 列表(List)Python中最常用的数据结构之一是列表,它可以存储任意类型的数据,并且支持增删改查等操作。

1.2 字典(Dictionary)字典是另一个常用的数据结构,它以键值对的形式存储数据,可以快速查找和修改数据。

1.3 集合(Set)集合是一种无序且不重复的数据结构,可以进行交集、并集、差集等操作,非常适合处理数学运算。

二、算法2.1 排序算法Python中有多种排序算法可供选择,如冒泡排序、快速排序、归并排序等,每种算法都有其适合的场景和特点。

2.2 查找算法查找算法用于在数据集中查找指定的元素,常见的查找算法有线性查找、二分查找等,可以提高查找效率。

2.3 图算法图算法是一类特殊的算法,用于解决图结构中的问题,如最短路径、最小生成树等,在网络分析和路由规划中有广泛应用。

三、应用实例3.1 数据处理数据结构与算法在数据处理中有着重要的应用,可以匡助我们高效地处理大量数据,如数据清洗、分析和建模等。

3.2 网络编程在网络编程中,我们时常需要使用数据结构与算法来处理网络数据包、路由信息等,确保网络通信的稳定和高效。

3.3 人工智能在人工智能领域,数据结构与算法也扮演着重要的角色,如机器学习算法中的数据预处理、特征选择等。

四、优化技巧4.1 空间复杂度优化在编写代码时,我们应该尽量减少空间复杂度,避免不必要的内存占用,提高程序的运行效率。

4.2 时间复杂度优化算法的时间复杂度直接影响程序的运行速度,我们可以通过选择合适的算法和数据结构来优化时间复杂度。

4.3 算法优化技巧除了选择合适的数据结构和算法外,我们还可以通过优化代码逻辑、减少循环嵌套等方式来提高程序的性能。

数据结构与算法测试题+参考答案

数据结构与算法测试题+参考答案

数据结构与算法测试题+参考答案一、单选题(共80题,每题1分,共80分)1、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?A、仅有头指针的单循环链表B、双链表C、仅有尾指针的单循环链表D、单链表正确答案:C2、数据结构研究的内容是()。

A、数据的逻辑结构B、数据的存储结构C、建立在相应逻辑结构和存储结构上的算法D、包括以上三个方面正确答案:D3、下列关于无向连通图特征的叙述中,正确的是:所有顶点的度之和为偶数边数大于顶点个数减1至少有一个顶点的度为1A、只有1B、1和2C、1和3D、只有2正确答案:A4、下面的程序段违反了算法的()原则。

void sam(){ int n=2;while (n%2==0) n+=2;printf(“%d”,n);}A、确定性B、可行性C、有穷性D、健壮性正确答案:C5、对任意给定的含 n (n>2) 个字符的有限集 S,用二叉树表示 S 的哈夫曼编码集和定长编码集,分别得到二叉树 T1 和 T2。

下列叙述中,正确的是:A、出现频次不同的字符在 T2 中处于相同的层B、出现频次不同的字符在 T1 中处于不同的层C、T1 的高度大于 T2 的高度D、T1 与 T2 的结点数相同正确答案:A6、数据序列{ 3,2,4,9,8,11,6,20 }只能是下列哪种排序算法的两趟排序结果?A、快速排序B、选择排序C、插入排序D、冒泡排序正确答案:A7、设散列表的地址区间为[0,16],散列函数为H(Key)=Key%17。

采用线性探测法处理冲突,并将关键字序列{ 26,25,72,38,8,18,59 }依次存储到散列表中。

元素59存放在散列表中的地址是:A、11B、9C、10D、8正确答案:A8、采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是:A、每次划分后,先处理较短的分区可以减少递归次数B、递归次数与每次划分后得到的分区处理顺序无关C、递归次数与初始数据的排列次序无关D、每次划分后,先处理较长的分区可以减少递归次数正确答案:B9、以下数据结构中,()是非线性数据结构。

数据结构与算法题库(含参考答案)

数据结构与算法题库(含参考答案)

数据结构与算法题库(含参考答案)一、单选题(共100题,每题1分,共100分)1、在一次校园活动中拍摄了很多数码照片,现需将这些照片整理到一个PowerPoint 演示文稿中,快速制作的最优操作方法是:A、创建一个 PowerPoint 相册文件。

B、创建一个 PowerPoint 演示文稿,然后批量插入图片。

C、创建一个 PowerPoint 演示文稿,然后在每页幻灯片中插入图片。

D、在文件夹中选中所有照片,然后单击鼠标右键直接发送到PowerPoint 演示文稿中。

正确答案:A2、下面对“对象”概念描述错误的是A、对象不具有封装性B、对象是属性和方法的封装体C、对象间的通信是靠消息传递D、一个对象是其对应类的实例正确答案:A3、设栈与队列初始状态为空。

首先A,B,C,D,E依次入栈,再F,G,H,I,J 依次入队;然后依次出队至队空,再依次出栈至栈空。

则输出序列为A、F,G,H,I,J,E,D,C,B,AB、E,D,C,B,A,J,I,H,G,FC、F,G,H,I,J,A,B,C,D,E,D、E,D,C,B,A,F,G,H,I,J正确答案:A4、设表的长度为 20。

则在最坏情况下,冒泡排序的比较次数为A、20B、19C、90D、190正确答案:D5、设二叉树的前序序列为 ABDEGHCFIJ,中序序列为 DBGEHACIFJ。

则后序序列为A、DGHEBIJFCAB、JIHGFEDCBAC、GHIJDEFBCAD、ABCDEFGHIJ正确答案:A6、Excel工作表B列保存了11位手机号码信息,为了保护个人隐私,需将手机号码的后 4 位均用“*”表示,以 B2 单元格为例,最优的操作方法是:A、=REPLACE(B2,7,4,"****")B、=REPLACE(B2,8,4,"****")C、=MID(B2,7,4,"****")D、=MID(B2,8,4,"****")第 10 组正确答案:B7、小金从网站上查到了最近一次全国人口普查的数据表格,他准备将这份表格中的数据引用到 Excel 中以便进一步分析,最优的操作方法是:A、通过 Excel 中的“自网站获取外部数据”功能,直接将网页上的表格导入到 Excel 工作表中。

北大强基面试题目

北大强基面试题目

北大强基面试题目
北大强基面试题目是北大计算机系为了选拔优秀学生而设计的一系列面试题目。

以下是一些常见的北大强基面试题目:
1. 数据结构和算法方面:
- 请解释什么是动态规划,并举一个实际应用的例子。

- 请解释什么是哈希表,并说明其在解决问题中的作用。

- 请实现一个快速排序算法,并分析其时间复杂度和空间复杂度。

2. 编程语言方面:
- 请解释面向对象编程的概念,并说明其与面向过程编程的区别。

- 请写出一个使用递归实现的斐波那契数列的函数。

- 请解释什么是异常处理,并说明其在程序开发中的重要性。

3. 计算机网络方面:
- 请解释什么是TCP/IP协议,并说明其在网络通信中的作用。

- 请解释什么是HTTP协议,并说明其与HTTPS协议的区别。

- 请解释什么是DNS,并说明其在互联网中的作用。

4. 操作系统方面:
- 请解释什么是进程和线程,并说明它们之间的区别。

- 请解释什么是死锁,并提供一个实际例子以及如何避免死锁的方法。

- 请解释什么是虚拟内存,并说明它的作用和优缺点。

以上只是一些常见的北大强基面试题目示例,实际面试中可能会有更多的题目
涵盖更多的领域。

希望这些问题的回答能够帮助你更好地准备面试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

× B A A A B B B A A 成功
评分标准: Next 数组3分,错3个扣1分,若给出的为精简版的,整体扣1分 匹配过程2分,
2、 说明边界处理方便得 1 分,下面 4 个点各得一分。说其他的理由,有
道理酌情给分。
答:带头结点的好处,可以方便一些边界处理,例如(答的点有 4 个以上就可 以): (1)单链表为空时的插入; (2)单链表被删除为空表时的处理; (3)插入作为表的第一个结点; (4)删除表的第一个结点;
} S.push(stack_top_operator);
// 1 分
S.push((double)(c_temp)); }
// 1 分
(8) str_temp[str_temp_pos++]=stack_top_operator; // 3 分
四、 算法设计与实现(30,每题 15 分)
1、 评分标准:(按 15 分计) 1、 算法思想:(5 分)
int lenS = strlen(s); int lenT = strlen(t);
// 消除 s 中的重复字符
for (i=0; i < lenS; i++) { for (j=i-1; j>=0; j--) if (s[j]== s[i]) {
// 当前字符之前的字符逐一比较, // 若相等则把后续的字符均左移一个位置
stack_top_operator=S.pop();
// 2 分
while (priority(stack_top_operator)>=priority(c_temp)) {// 5 分
str_temp[str_temp_pos++]=stack_top_operator;
stack_top_operator=pop();
1、 对于串 s 的每个字符在串 t 中搜索一次(可以直接从头至尾搜索或调用 strchr 函数),有无出现,若无则将该字符存储于串 r 中;
2、 消除 r 中的重复字符;优化版,先把 s 中的重复字符消除 3、 通过定位运算记录 r 中各字符在 s 中的第 1 次出现位置(也可以在第 1
步时保留出 s 中不出现于 t 中字符的位置) 2、算法注释 (2 分)
3、参考代码 (8 分)
typedef struct { int p; char c;
} newType; int main(int argc, char *argv[])
char s[30], t[30]; newType r[30]; int i, j, k = s0;
cin >> s; cin >> t;
6×105
33019
1.8×1013
或 3.3×104
3、 A, D
4、 后序
5、 60
6、 11
7、 (n+1)/2 (O(n), n/2 也都给了一半分)
8、
S
A
B
D
C
E
G
I
J
F
H
K
9、 4 或 7(答对一个给了一半分) 10、 kh,(kh+1-1)/(k-1)
二、 简答题(15 分,每题 5 分)
if (j ==lenT) {
// 与 t 的所有字符比较且不等,记录在 r 中
r[k].p = i;
r[k].c = s[i];
k++;
}
}
}
2、 答案:
void CountTreeLeaves(TreeNode* root , int& count ) {
while(NULL!=root) {
if ( root->pChild == NULL )
如果答:维持当前结点的前驱,这样比较有利于对当前结点的删除,或在当前 结点前插入。
这其实包含前面 1-4 点。如果学生还明显地说明了"有利于对空表处理",则 可以给满分。
如果没有这句话,只说明"方便一些边界处理"、"维持当前结点的前驱",
则扣 1 分,也就是可以给 4 分。
三、 程序填空题(25,前 5 空,每空 2 分,后 3 空,每空 5 分)
(1) info=*ppos;
(2) rpos=inpos;
(3) rpos-ipos; (4) ipos;
(5) ppos+1 (6) while ((c_temp=(int)pop()) != '(')
// 3 分
str_temp[str_temp_pos++]=c_temp;
(7) { // 比较操作符的优先级进行 push 或者 pop
1、 证明:n 个结点的 m 叉树共有 n*m 个指针域,已使用的指针域为 n-1, 所以空指针的个数为 n(m-1)+1
2、解答:Next = {-1, 0, 0, 0, 0, 1, 1, 1, 2} 或精简版{-1, 0, 0 ,0 ,-1, 1, 1, 0, 0} 匹配返回19,其过程如下图 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 BAAABBBCD D DCCHHHHBBBAAABBBAADD B A A A B B B A i=7,j=7, i =next[7]=0
北京大学信息学院
2007 年《ห้องสมุดไป่ตู้据结构与算法》期中考试答案
——张铭、赵海燕、王腾蛟、宋国杰
一、 填空题(30 分,每空 2 分)
1、 C
2、 指数量级正确,给一半分。按 e 为底计算给一半分。
算法复杂度 nlog n
n2
100n2
n3
2n
数据规模
(e)1.29×1012 6×106 (10)2.889×1012
int count = 0; const TreeNode<T> * p = root; while(p != NULL) {
if(p->pChild == NULL) count += 1;
else count += CountTreeLeaves(p->pChild);
p = p->pSibling; } return count; }
for (int m=i; m<lenS; m++)
s[m]=s[m+1];
lenS--;
j=i-1;
}
} // 断 s 中的字符是否出现在 t 中
for ( i=0; i < lenS; i++) {
s for (j= 0; j<lenT; j++) if (s[i]==t[j]) break;
// 出现的话,则跳过
× B i=0, j =7, i = next[i] = -1 ×
B i=0, j =8, i = next[i] = -1 ……
…….
×
B i=0, j = 16, i = next[i] = -1,
×
B A i=1, j = 17, i = next[1] = 0,
×
B i=0, j = 18, i = next[0] = -1,
//得到树的树叶个数
count++; CountTreeLeaves( root->LeftMostChild() , count); //访问头一棵树树根的子树
root=root->RightSibling();
//周游其他的树
}
}
int Tree<T>::CountTreeLeaves(TreeNode<T> * root ) {
相关文档
最新文档