数据结构北大练习题

合集下载

北京大学自考上机数据结构练习

北京大学自考上机数据结构练习

数据结构练习题11.对二叉树扩充方法是:对无左孩子的结点,增加一个标记为*的左孩子的结点;对无右孩子的结点,增加一个标记为*的右孩子的结点。

编一C程序,它能根据输入的扩充后的二叉树的前序序列来构造原二叉树,并且输出原二叉树中序和后序序列及高度。

例如,下面的二叉树扩充后的前序序列为:AB*D**CE***A/ \B C\ /D E(注:程序的可执行文件名必须是e1.exe,存于你的账号或其debug目录下。

)#include <stdio.h>#include <malloc.h>#include <string.h>void exit(int);typedef struct node {char data;struct node *lchild,*rchild;}BinTNode;void createBinTree(BinTNode **T){char ch;ch = getchar();if(ch == '*')*T = NULL;else{*T = (BinTNode *)malloc(sizeof(BinTNode));(*T)->data = ch;createBinTree(&(*T)->lchild);createBinTree(&(*T)->rchild);}}void inorder(BinTNode *T){if(T == NULL)return ;else{inorder(T->lchild);printf("%c ",T->data);inorder(T->rchild);}}void postorder(BinTNode *T){if(T == NULL)return;else{postorder(T->lchild);postorder(T->rchild);printf("%c ",T->data);}}int height(BinTNode *T){int h1,h2;if(T == NULL)return 0;else{h1 = height(T->lchild);h2 = height(T->rchild);return 1 + (h1>h2 ? h1 : h2);}}void main(){BinTNode *T;createBinTree(&T);printf("\n");inorder(T);printf("\n");postorder(T);printf("\n");printf("%d\n",height(T));}//AB*D**CE***2. 编一C程序,它能根据读入的数据构造无向图G,并输出G的邻接矩阵及DFS遍历序列(从V0开始)以及拓扑序列,图的输入形式为n V0 Vi0 V1 Vi1 V2 Vi2...Vi Vin -1 -1(-1,-1为输入结束标记,其余的值都>=0且<n),它们都是整数,且100>n>0。

北大计算机专业考研题库

北大计算机专业考研题库

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

以下是一些模拟题目,供参考:
# 一、选择题
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. 假设你是一名软件工程师,你的团队正在开发一个大型在线多人游戏。

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

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

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

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

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

祝所有考生考研顺利!。

华文慕课数据结构与算法(上)(北京大学)章节测验答案

华文慕课数据结构与算法(上)(北京大学)章节测验答案

解忧书店 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、线性表采用顺序存储,必须占用一片连续的存储单元。

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个顶点的连通图用邻接矩阵表示时,该矩阵至少有______个非零元素。

最新-北大网络教育数据结构作业 精品

最新-北大网络教育数据结构作业 精品

数据结构1.鼓励独立完成作业,严惩抄袭[2.4.1] 在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n)时,需要依次前移______个元素。

A. A. n-i正确答案:A2.[2.4.2] 在一个长度为n的线性表中顺序查找值为x的元素时,查找时的平均查找长度(即x同元素的平均比较次数,假定查找每个元素的概率都相等)为:C. C. (n+1)/2正确答案:C3.[2.4.3] 在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点,则执行D. D. p->next = q->next ; q->next = p;正确答案:D4.[2.4.4] 在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行C. C. p = q->next ; q->next = p->next;正确答案:C5.[3.5.1] 在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有相同的________A. A. 行号正确答案:A6.[3.5.2] 设一个广义表中结点的个数为n,则求广义表深度算法的时间复杂度为_______。

B. B. O(n)正确答案:B7.[6.2.1] 下列关键字序列中,________是堆。

D. D. 16, 23, 53, 31, 94, 72正确答案:D8.[6.2.2] 堆的形状是一棵____________。

C. C. 完全二叉树正确答案:C计算题.doc10.[2.1] 线性表的两种存储结构顺序表和链表中:(1)两种存储表示各有哪些主要优缺点?(2)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。

在此情况下,应选用哪种存储结构?给予解释?(3)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?给予解释?正确答案:(1)顺序存储表示是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。

数据结构试卷试题及答案

数据结构试卷试题及答案

数据结构试卷试题及答案一、选择题(每题5分,共40分)1. 数据结构是研究数据元素的()A. 存储结构B. 处理方法C. 逻辑结构D. 所有以上内容答案:D2. 在数据结构中,通常采用()方式来表示数据元素之间的逻辑关系。

A. 顺序存储结构B. 链式存储结构C. 索引存储结构D. 散列存储结构答案:B3. 下面哪一个不是栈的基本操作?()A. 入栈B. 出栈C. 判断栈空D. 获取栈顶元素答案:D4. 下面哪一个不是队列的基本操作?()A. 入队B. 出队C. 判断队列空D. 获取队头元素答案:D5. 下面哪一个不是线性表的特点?()A. 有且只有一个根节点B. 每个节点最多有一个前驱和一个后继C. 数据元素类型相同D. 数据元素类型可以不同答案:D6. 在下列哪种情况中,使用链式存储结构比顺序存储结构更合适?()A. 数据元素经常插入和删除B. 数据元素大小不固定C. 数据元素个数不确定D. 所有以上情况答案:D7. 下面哪一个不是树的遍历方式?()A. 前序遍历B. 中序遍历C. 后序遍历D. 翻转遍历答案:D8. 在下列哪种情况中,使用散列存储结构比其他存储结构更合适?()A. 数据元素个数较少B. 数据元素查找频繁C. 数据元素插入和删除频繁D. 数据元素大小不固定答案:B二、填空题(每题5分,共30分)9. 栈是一种特殊的线性表,它的插入和删除操作都限定在表的一端进行,这一端称为______。

答案:栈顶10. 队列是一种特殊的线性表,它的插入操作在表的一端进行,这一端称为______,而删除操作在另一端进行,这一端称为______。

答案:队尾、队头11. 二叉树中的节点包括______和______。

答案:根节点、子节点12. 在图的存储结构中,邻接矩阵表示法用______个一维数组来表示图中各个顶点之间的关系。

答案:两个13. 散列存储结构中,关键码到存储地址的映射方法称为______。

数据结构习题(包含全部答案解析)

数据结构习题(包含全部答案解析)

数据结构习题集(自编)第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。

A.结构B.关系 C.运算 D.算法2.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.逻辑结构和存储结构3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。

A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。

A.找出算法的合理性 B.研究算法的输人与输出关系C.分析算法的有效性以求改进 D.分析算法的易懂性5. 算法的时间复杂度取决于()A.问题的规模B待处理数据的初态 C. A和B6.一个算法应该是()。

A.程序B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.7. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的8.以下与数据的存储结构无关的术语是()。

A.循环队列 B. 链表 C. 哈希表 D. 栈9.在下面的程序段中,对x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;nA. 2n B.n C.n2 D.log210.以下数据结构中,()是非线性数据结构A.树 B.字符串 C.队列 D.栈11. 下列数据中,()是线性数据结构。

A.哈夫曼树 B.有向无环图 C. 二叉排序树 D. 栈12.以下属于逻辑结构的是()。

A.顺序表 B. 哈希表 C.有序表 D. 单链表二、填空题1、_______是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,________是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。

(数据、数据)2、数据元素是数据的______,有些情况下也称为元素、结点、顶点、记录等。

北京大学数据结构与算法2017春季《数据结构与算法A》期末考试题考试试卷

北京大学数据结构与算法2017春季《数据结构与算法A》期末考试题考试试卷

北京大学信息科学技术学院考试试卷考试科目:数据结构与算法A 姓名:学号:考试时间:2017 年1 月4 日任课教师:以下为试题和答题纸,共页。

得分一、选择填空题(每空1分,共11分)(答案写在答题纸上)1.G是一个非连通无向图,共有21条边,则图G至少有个顶点。

2.对于一个包含N(N>1)个顶点的图,假定任意两点间最多只有一条边,那么下列哪些情况是错误的_________。

A.如果是有向图,则其任何一个极大强连通子图都无法进行拓扑排序。

B.如果是无向连通图,则其最小生成树一定不包括权重最大的边。

C.如果是无向连通图,假设所有边的权重均为正值,Dijkstra算法给出的生成树不一定是最小生成树,但是与该图的任何一个最小生成树都至少有一条相同边。

3.有向图G如下图所示:(1)写出所有可能的拓扑序列:。

(2)若要使该图只有惟一的拓扑序列,则可以添加一条弧(请写出所有弧)。

4.在快速排序中,定义一次平分的划分为“幸运的划分”,而一次划分如果有一边为空则是“不幸的划分”。

假设划分的过程总是“幸运”和“不幸”交替的,则该快速排序的时间复杂性为。

5.具有10000个关键码的16阶B树的查找路径长度(从根到叶节点访问B树索引块的次数)不会小于。

6.设有8个初始归并段,其长度分别为32,46,56,64,20,87,70,40;进行3路归并排序,所构造的最佳归并树对应的总读写次数为。

7.A[N][N]是对称矩阵,现将下三角矩阵按行存储到一维数组T[N(N+1)/2]中(包括对角线),则对任一上三角元素A[i][j]其对应值(0 <= i <= j < N)在T[k]中的下标k是。

8.在一棵空A VL树中,顺序插入如下关键码:{5, 9, 4, 2, 1, 3, 8},请问全部插入后,在等概率下查找成功的平均检索长度为。

9.已知广义表C=(c, (d, A), B, e),则广义表C的深度为,tail(head(tail(C)))的运算结果为。

北京大学数据结构与算法2015-16DS期末考试题考试

北京大学数据结构与算法2015-16DS期末考试题考试
{
bool isStr; //标记该结点处是否构成单词
struct TrieNode *next[MAX]; //儿子分支
}Trie;
void insert(Trie *root,const char *s) //将单词s插入到字典树中
{
if(root==NULL||*s=='\0')
return;
= 2 (表示AVL Tree高度为2的节点总数)
= + + 1 (表示AVL Tree高度为h的节点总数)
换句话说,当节点数为N时,高度h最多为 。
三、算法填空(每空3分,共12分)
1.下列代码利用Trie树,实现了字典树中单词的插入,试补全下列代码段。
typedef struct TrieNode //Trie结点声明
利用伸展树实现。对于伸展树中每个节点需要维护一下几个信息:
这个点的左右孩子left,right,父亲parent,数值value
这个点为根的子树的大小size,总和sum,最大子序列maxsum。子树左端所延伸的最大子序列leftmax,和子树右端所延伸的最大子序列rightmax。
1.插入操作:把第k个位置上的数splay到根节点,将待插入数字插入到根的右子树的中(即最左节点)。之后将插入节点splay到根节点。
2.删除:删除数组第k个位置的数字
3.修改:将数组第k个位置的数字x修改为y
4.求和:计算数组位置k1到k2的子序列的和
5.求最大连续子序列:求出整个数组中最大连续子序列的和
请设计出一个算法可以实现上述操作,并尽量优化你的算法。你只需要描述算法的思想,以及各个操作的实现思路,也可以用伪代码来表示。
答案:

北京大学数据结构与算法2016-2017数据结构与算法final-ans

北京大学数据结构与算法2016-2017数据结构与算法final-ans

北京大学信息科学技术学院考试试卷考试科目:数据结构与算法A 姓名:学号:考试时间: 2016 年 1 月 6 日任课教师:以下为试题和答题纸(答案写在答题纸上),包括本页共 6 页。

第一题填空题(每空1分,共8分)1.设无向图G = (V,E)中V={1, 2, 3, 4, 5, 6, 7},E={(1,2), (1,3), (2,3), (4,5), (3,6),(4,7), (5,7)}。

则图G包含的不同生成森林的个数为_____9____。

注释:其中若两个生成森林的边集不同,则认为它们是不同的生成森林。

2.若对下面的无向图以1为起点运行单源最短路径的Dijkstra算法,则在Dijkstra算法的过程中,每一步依次被选出的顶点依次是_1,2,4,3,7,5,6,8,9,10___。

若忽略边权,以6为起点进行一次广度优先周游,将得到一棵广度优先搜索的生成树。

设仅包含一个结点的树高度为1,则该生成树的高度为_3_,树的最深层结点集合为_1,5,7,10__。

第一空回答2,4,3,7,5,6,8,9,10也算对3.用某种排序方法对序列(25, 84, 21, 47, 15, 27, 68, 35, 20)进行排序时,若序列的变化情况如下,则所采用的排序方法为__快速排序__。

25, 84, 21, 47, 15, 27, 68, 35, 2020, 15, 21, 25, 47, 27, 68, 35, 8415, 20, 21, 25, 35, 27, 47, 68, 8415, 20, 21, 25, 27, 35, 47, 68, 844.假设Shell排序的增量序列是(2k, 2k-1, … , 2, 1),其中k=[log2 n]。

若待排序序列是正序的(已经排好)或逆序的,则Shell排序的时间复杂度分别是__O(nlogn)_、O(nlogn)_。

各0.5分5.设输入的关键码满足k1>k2>…>k n,缓冲区大小为m。

数据结构北大练习题

数据结构北大练习题
2. (7 分)下面这个双标记(0 表示有子结点、1 表示没有)的二叉树前序序 列对应的森林的后根周游序列为___________________________。 右标记 0 1 1 0 0 1 0 1 1 1 信息 A B D C E G F H I J 左标记 0 0 1 0 1 0 0 1 1 0
12,18)出现。 (1) 请给出它们的 Huffman 编码(具体编码答案不惟一,但应该是最优编
码)。 (2) 对它们进行等长编码,可以编为(000, 001, 010, 011, 100, 101, 110)。假
设一个 A-G 字母组成的文件,以符合题中规定频率出现。如果其固定长 度编码所得到的文件长度为 18600 位(bit),则采用 Huffman 编码为多少 位?Huffman 编码节省的空间比例为多少?请给出具体的计算过程。
while (root!=NULL) { cout<<root->value();
F H
traverse(root-&e(root->rightchild());
J
}
}
2. (15 分)请判断下述二叉搜索树的结点删除算法是否正确。
(1) 如果正确,请给出一个简单实例,演示算法运行步骤;
-5-
共6页
void setValue(const T& val); };
//设置当前结点的数据域
-6-
共6页
诚实考试宣言:
我真诚地保证严格遵循考场纪律: 1. 诚实地用自己所掌握的知识和能力,独立地回答试卷; 2. 不夹带任何有作弊嫌疑的书本、纸条或写在其他地方的提示性资料进入考
场; 3. 正式考试(包括发卷和收卷)过程中,不与考场的同学交谈或借物品,有问

2005-2006年北京大学数据结构期末考试试题

2005-2006年北京大学数据结构期末考试试题

2005-2006年北京大学数据结构期末考试试题(答案写在答题纸上)一、简答(10分)(1)什么是数据结构?它主要研究的问题是什么?答:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

数据结构研究的问题是数据的物理结构和逻辑结构,以及在此结构上定义并实现相关的运算,计算算法的效率。

(2)阅读以下程序,写出带@ 语句的频度(运行次数)。

X=91;Y=100;While(Y>=0)If (X>100) ……………@{X - =10;Y- -}ElseX++;答:频度为1111次二、编程(10分)编制一个程序就地实现单链表的逆置算法。

说明:1.算法中不能再另外增加结点空间(即不能在算法中使用malloc()函数分配新的结点空间),但可以增加几个必要的指针变量。

2.该单链表具有头结点。

例如:L答案:invert(Linklist &L){ p=L;q=L->next;while(q){r=q->next;q->next=p;p=q;q=r;}L->next=NULL;L=p;}评分标准:总分为10分。

程序不同,但思路正确者也可酌情给分。

三、编程(10分)用循环队列将序列a0 a1 a2 a3┉┉ak-1 ak┉an循环右移k位。

(序列变为ak┉┉an a0 a1 a2 a3┉ak-1)。

答案:Right(SqQueue &Q,int k){ for(I=1;I<=k;I++){ Q.base[Q.rear]=Q.base[Q.front];Q.rear=(Q.rear+1)%Maxsize;ront=(Q.front+1)%Maxsize;}}评分标准:总分为10分。

出队为8分,入队为2分。

程序不同,但思路正确也可酌情给分。

四、树(10分)已知一棵二叉书树的先序序列为ABDHECFGI,中序序列为DHBEAFCIG,画出该二叉树。

五、画图(10分)画出下图的最小生成树。

数据结构的试题及答案

数据结构的试题及答案

数据结构的试题及答案一、选择题(每题2分,共10分)1. 在数据结构中,()是数据元素之间的相互关系的集合。

A. 数据B. 结构C. 存储结构D. 逻辑结构答案:D2. 线性表的顺序存储结构中,存储元素的物理位置是()。

A. 连续的B. 离散的C. 任意的D. 无关的答案:A3. 在二叉树的遍历方法中,先访问根节点,然后遍历左子树,最后遍历右子树的遍历方式是()。

A. 前序遍历B. 中序遍历C. 后序遍历D. 层序遍历答案:A4. 哈希表的冲突解决方法中,()是将所有发生冲突的元素存储在同一个链表中。

A. 线性探测B. 链地址法C. 再散列D. 双散列答案:B5. 在图的遍历算法中,深度优先搜索(DFS)算法使用的辅助数据结构是()。

A. 栈B. 队列C. 链表D. 数组答案:A二、填空题(每题2分,共10分)1. 在数据结构中,算法的时间复杂度通常用()表示。

答案:O(n)2. 一个栈的初始状态为空,依次执行了Push(1), Push(2), Pop(), Push(3), Pop()操作后,栈顶元素是()。

答案:13. 在二叉搜索树中,对于任意节点,其左子树中的所有值都()该节点的值。

答案:小于4. 哈希表的装载因子是表中已填入的元素个数与哈希表的()之比。

答案:总容量5. 图的邻接矩阵表示法中,如果两个顶点之间有边相连,则对应的矩阵元素值为()。

答案:1三、简答题(每题5分,共20分)1. 请简述什么是递归,并给出一个递归算法的例子。

答案:递归是一种算法设计技巧,它允许一个函数直接或间接地调用自身。

递归算法的例子是计算阶乘:n! = n * (n-1)!,其中n! = 1当n=0时。

2. 请解释什么是堆排序,并简述其基本步骤。

答案:堆排序是一种基于堆数据结构的比较排序算法。

基本步骤包括构建最大堆,然后重复移除堆顶元素并调整剩余元素以保持最大堆属性。

3. 请描述什么是图的广度优先搜索(BFS)算法,并给出其算法步骤。

北大数据结构与算法期末考试模拟试卷.doc

北大数据结构与算法期末考试模拟试卷.doc

2014年春季北大《数据结构与算法B》期末考试模拟试卷(本试卷只是给同学们看看考题形式和范围,难度与真实考卷稍有差别)学号______________ 姓名_______________ 教师/教室_____________(注:如米标明,本试卷题屮的下标、位.胃.都从o开始计数)一、填空题(共32分)1.设有字符串变量String A = “This”,C=“just”,D=“ajest”,请计算下列表达式:(1)A+B+D= “Thisisajest” ;(2) D.IndexOf(“t’’) = _2_:(求字符在字符串中的第一个位置)(3) B.StrlengthQ = __ 2 __(4) D.SubStr(U2)= _ _________ (注:1为起始下标,2为子串长度)【4分】2.顺序査找n个元素的顺序表,若查找成功,则比较关键字的次数S多为n 次;若查找失败,则比较关键字的次数最多为_n_,最少力_次。

【3分】3.在散列函数H (key) =key%p中,p值最好取_____ 质数(或素数) _____ 。

【1分】4.对于下图邻接表所对应的有向图,试写出:【2分】(1)从顶点①出发进行深度优先遍历结果_1,2, 3, 4, 5_;(2)从顶点①出发进行广度优先遍历结果_1,2, 3, 4, 55.当图中各条边上的权值_都相等_时,宽度优先搜索算法可用来解决单源最短路径问题?【2分】6.—棵有n个结点的满二叉树有i个度为1的结点、有(n-1)/2个分支 <非终端)结点;该满二叉树的深度最大为_(n-l)/2_,最小为int(log2n)gcLlog2nJo (独根树深度为0)【4分】7.对于给定的n个元素,可以构造出的逻辑结构有线性结构,树形结构,阁形结构,_集合_四种。

【2分】8.下面程序段的时间复杂度力_O(n)_。

(n〉l)[大O表示法]【2分】sum=l;for (i=0;sum<n;i++) sum十=1;9.对于最大堆65 43 59 24 37 48 57 12 23 28 5 3,删除掉最大元素后,堆中元素为59,43,57,24,37,48,3,12,23,28,5【2 分】6510.从空二叉树开始,严格按照二叉搜索树的插入算法(不进行旋转平衡),逐个插入关键码{18,73,10,5,68,99,27,41,51,32,25 }构造出一棵二叉搜索树,该二叉树转换为森林,则该森林的层次遍历序列为18 73 99 10 68 5 27 41 51 25 32【4分】11.用S表示入栈操作,X表示岀栈操作,若元素入栈的顺序为12345,为了得到13542出栈顺序,相应的S和X的操作串为_SXSSXSSXXX_。

北大数据结构上机考题总结(1)

北大数据结构上机考题总结(1)

1. 编一C程序,它能读入集合A的一串整数(以-9999为结束标记,整数个数小于1000)和集合B 的一串整数(以-9999为结束标记,整数个数小于1000),计算并以从小到大的次序输出A-B 的所有元素(为A或B输入时,同一个数可能出现多次,而A与B的差集中同一个数不能出现多次)。

(注:程序的可执行文件名必须是 e1.exe)(注:程序的可执行文件名必须是 e4.exe)*/#include <stdio.h>void BubbleSort(int r[],int n){//冒泡排序(有小到大)int i,j,k;int exchange;for(i=0;i<=n;i++){exchange=0;for(j=n-1;j>=i;j--)if(r[j+1]<r[j]){k=r[j+1];r[j+1]=r[j];r[j]=k;exchange=1;}if(!exchange)break;}}int DisaSameYs(int r[],int n){//消除数组r[]中的重复元素,并返回消除后数组剩余的元素个数int w,x,y;for(w=0;w<=n;w++){for(x=w+1;x<=n;x++){if(r[w]==r[x]){n--;for(y=x;y<=n;y++){r[y]=r[y+1];}//endforx--;}//endif}//endfor}//endforreturn n;}int cha(int m[],int n[],int l[],int Countaa,int Countbb){//求差集int i=0,j=0,k=0;int exch;while(i<=Countaa){exch=0;//交换变量为0for(j=0;j<=Countbb;j++){//用集合的第一个元素分别和另一个集合的各元素相比较//然后再用第二个元素(直到最后一个元素)和另一个集合的各元素相比较 if(m[i]==n[j]){//如果相同,交换变量变为1exch=1;break;}//endif}//endforif(!exch){//如果没有相同的就保存m[i]到l[]中l[k]=m[i];k++;}i++;}//endwhilereturn k;}/*void testds(int r[],int n){//测试消除数组中的重复元素的效果用下列循环输出int z;for(z=0;z<=n;z++)printf("%d",r[z]);}printf("\n");}*/void main(){int a[1000], b[1000],c[2000];int exchange=0;int i,j,k,CountA,CountB,CountC;printf("input a\n");for(i=0;i<=1000;i++){scanf("%d",&a[i]);if(a[i]==-9999)break;}CountA=i-1;BubbleSort(a,CountA);CountA=DisaSameYs(a,CountA);// testds(a,CountA);printf("\ninput b\n");for(i=0;i<=1000;i++){scanf("%d",&b[i]);if(b[i]==-9999)break;}CountB=i-1;BubbleSort(b,CountB);CountB=DisaSameYs(b,CountB);//testds(b,CountB);CountC=cha(a,b,c,CountA,CountB);printf("\n\n");for(i=0;i<=CountC-1;i++)printf("%d ",c[i]);}printf("\n");}模式匹配#include <stdio.h>#include <string.h>typedef struct{// int ch[2000];char ch[2000];int length;}SeqString;int NaiveStrMatch(SeqString T,SeqString P) {int i,j,k;int m=P.length;int n=T.length;for(i=0;i<=n-m;i++){j=0;k=i;while(j<m&&T.ch[k]==P.ch[j]){k++;j++;}if(j==m)return i;}//endforreturn -1;}//NaiveStrMatchSeqString CreatStr(SeqString R){int i;printf("input data\n");for(i=0;i<2000;i++){// scanf("%d",&R.ch[i]);// if(R.ch[i]==-9999)scanf("%s",&R.ch[i]);if(!(strcmp(&R.ch[i],"-9999")))break;}R.length=i-1;return R;}void main(){int n;SeqString Str1;Str1=CreatStr(Str1);SeqString Str2;Str2=CreatStr(Str2);n=NaiveStrMatch(Str1,Str2);printf("%d\n",n);}2、编一C程序,它能读入集合A的一串整数(以-9999为结束标记,整数个数小于1000)和集合B的一串整数(以-9999为结束标记,整数个数小于1000),计算出A与B的交集,并以由小到大的次序输出A与B的交集中的所有整数(输入整数时,相邻的两个用空格隔开。

北大17秋08281006-数据结构作业答案

北大17秋08281006-数据结构作业答案

一、单选题(共30题,每题1分,共30分)
每空有一个正确选择,请将正确的选择填在题号前边。

(每空1分,共30分) 1. (第一章)数据的逻辑结构被形式地定义为B=(K,R),其中K 是 ______的有限集合。

试题编号:1.01.1
试题类型:单选题
标准答案:C
试题难度:一般
试题解析:***
考生答案:C
考生得分:***
是否评分:未评分
评价描述:***
2. (第一章)数据的逻辑结构被形式地定义为B=(K,R),其中R 是K 上的______的有限集合。

试题编号:1.01.2
试题类型:单选题
标准答案:H
试题难度:一般
试题解析:***
考生答案:H
考生得分:***
是否评分:未评分
评价描述:***
3. (第一章)以下关于算法的说法不正确的是______________。

(完整版)数据结构练习题及参考答案

(完整版)数据结构练习题及参考答案

数据结构练习题第一部分绪论一、单选题1. 一个数组元素a[i]与________的表示等价。

A、 *(a+i)B、 a+iC、 *a+iD、 &a+i2. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。

A、参数类型B、参数个数C、函数类型3. 若需要利用形参直接访问实参,则应把形参变量说明为________参数A、指针B、引用C、值4. 下面程序段的时间复杂度为____________。

for(int i=0; i<m; i++)for(int j=0; j<n; j++)a[i][j]=i*j;A、 O(m2)B、 O(n2)C、 O(m*n)D、 O(m+n)5. 执行下面程序段时,执行S语句的次数为____________。

for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)S;A、 n2B、 n2/2C、 n(n+1)D、 n(n+1)/26. 下面算法的时间复杂度为____________。

int f( unsigned int n ) {if ( n==0 || n==1 ) return 1; else return n*f(n-1);}A、 O(1)B、 O(n)C、 O(n2)D、 O(n!)二、填空题1. 数据的逻辑结构被分为__________、_________、__________和__________四种。

2. 数据的存储结构被分为__________、_________、__________和__________四种。

3. 在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着________、________和________的联系。

4. 一种抽象数据类型包括__________和__________两个部分。

5. 当一个形参类型的长度较大时,应最好说明为_________,以节省参数值的传输时间和存储参数的空间。

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

(BinaryTreeNode<T>* pointer)
{
/* 第 1 行 */
if ( pointer == NULL ) return;
/* 第 2 行 */
BinaryTreeNode<T> * temppointer;
/* 第 3 行 */
BinaryTreeNode<T> * tempparent = NULL;
保证人:________________
不在“诚实考试宣言”之后签名的试卷,计零分或根据作弊与否的情况上报学 校处理!
-1-
共6页
一、(20 分)填空
1. (3 分)下面术语________________与数据的存储结构无关(写出编号)。 a) 顺序表 b) 链表 c) 队列 d) 循环链表
2. (7 分)下面这个双标记(0 表示有子结点、1 表示没有)的二叉树前序序 列对应的森林的后根周游序列为___________________________。 右标记 0 1 1 0 0 1 0 1 1 1 信息 A B D C E G F H I J 左标记 0 0 1 0 1 0 0 1 1 0
// 上述算法填空中可以参考的二叉链表结点定义
template <class T>
class BinaryTreeNode {
private: T element;
//二叉树结点数据域:
BinaryTreeNode<T>* left;
//二叉树结点指向左子树的指针
BinaryTreeNode<T>* right;
北京大学信息科学技术学院 2005-2006 学年
第一学期本科生期中考试试卷
考试科目: 数据结构与算法 A 考试时间:2005 年 11 月 5 日
姓名 题号
专业

学号



班 考场 三教

毛教员:张铭、赵海燕、王腾蛟

五 总分
得分
注意事项:
1. 第一题填空答案请写在试卷的留白上,其他题目都写在空白答题纸上。若 超出所留空间,请使用后面的续页。
-3-
共6页
} // end of while tempparent->right = temppointer->leftchild(); temppointer->left = pointer->leftchild(); temppointer->right = pointer->rightchild(); } else temppointer = pointer->leftchild(); if ( parent->leftchild() == pointer ) parent->left = temppointer; else parent->right = temppointer; delete pointer; pointer=NULL; }
BinaryTreeNode<T>* rightchild() const; //返回当前结点右子树
void setLeftchild(BinaryTreeNode<T>*) ; //设置当前结点的左子树
void setRightchild(BinaryTreeNode<T>*) ; //设置当前结点的右子树
//返回第一个左孩子
TreeNode<T>* RightSibling();
//返回右兄弟
void setValue(T&);
//设置结点的值
void setChild(TreeNode<T>* pointer);
//设置左孩子
void setSibling(TreeNode<T>* pointer); //设置右兄弟
2. 本试卷对于算法改进、算法设计都有质量要求,请尽量按照试题中的要求 来写算法。否则将酌情扣分。
3. 您所写的算法应该申明算法思想,并在算法段加以恰当的注释。
诚实考试宣言:
我真诚地保证严格遵循考场纪律: 1. 诚实地用自己所掌握的知识和能力,独立地回答试卷; 2. 不夹带任何有作弊嫌疑的书本、纸条或写在其他地方的提示性资料进入考
三、(20 分)算法辨析题
1. (5 分)二叉树周游是对树中的每个结点访问而且只访问一次。请判断下面
这个算法是否正确地周游了二叉树。
(1) 如果是,请对右图写出此算法的输出结果;
A
(2) 如果否,请简要说明理由,并改正(请template <class T>
E
C
K
void BinaryTree::traverse(BinaryTreeNode<T>* root) {
void InsertFirst(TreeNode<T>* node);
//以第一个左孩子身份插入结点
void InsertNext(TreeNode<T>* node); //以右兄弟的身份插入结点
};
五、(15 分)算法设计
假设二叉树结点的值唯一,写出在二叉链表中查找值为 x 的结点在树中所处 层数的算法 Nodelayer( )(假设根结点处于 0 层)。函数 Nodelayer( )返回值为 x 的结点的层次,若无值为 x 的结点,返回-1。 template<class T> int NodeLayer(BinaryTreeNode<T>*root, <T> x)
/* 第 7 行 */
while (temppointer->rightchild() != NULL ) { /* 第 8 行*/
tempparent = temppointer;
* 第 9 行*/
temppointer = temppointer->rightchild();/* 第 10 行*/
//二叉树结点指向左子树的指针
public: BinaryTreeNode();
//缺省构造函数
BinaryTreeNode(const T& ele);
//给定数据的构造函数
T value() const;
//返回当前结点的数据
BinaryTreeNode<T>* leftchild() const; //返回当前结点左子树
/* 第 11 行*/ /* 第 12 行*/ /* 第 13 行*/ * 第 14 行*/ /* 第 15 行*/ /* 第 16 行*/ /* 第 17 行*/ /* 第 18 行*/ /* 第 19 行*/ /* 第 20 行*/ /* 第 21 行*/
四、(15 分)算法填空
下面的函数 tree_compare()采用广度优先周游来遍历两棵树,如果这两 棵树的结构以及对应结点中的值相同则返回 true 否则 false。请填充算法的空 格,使其成为完整的算法,空格中可能需要填写 0 至多条语句。 bool tree_compare(TreeNode* treeA, TreeNode* treeB) {
12,18)出现。 (1) 请给出它们的 Huffman 编码(具体编码答案不惟一,但应该是最优编
码)。 (2) 对它们进行等长编码,可以编为(000, 001, 010, 011, 100, 101, 110)。假
设一个 A-G 字母组成的文件,以符合题中规定频率出现。如果其固定长 度编码所得到的文件长度为 18600 位(bit),则采用 Huffman 编码为多少 位?Huffman 编码节省的空间比例为多少?请给出具体的计算过程。
While (p && q) { aQueue.push(p); bQueue.push(q);
// ?1
}
// ?2
p = aQueue.front(); aQueue.pop(); q = bQueue.front(); bQueue.pop(); if (p->value != q->value) return false;
while (root!=NULL) { cout<<root->value();
F H
traverse(root->leftchild());
traverse(root->rightchild());
J
}
}
2. (15 分)请判断下述二叉搜索树的结点删除算法是否正确。
(1) 如果正确,请给出一个简单实例,演示算法运行步骤;
if (treeA == null) { if (treeB == null) return true; return false;
} if (treeB == null) return false; using std::queue; queue<TreeNode*> aQueue, bQueue; TreeNode* p = treeA; TreeNode* q = treeB; While (true) {
等价对都被处理之后,所得父结点的下标值。 父结点 的下标
结点值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
结点的 下标 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
二、(30 分)辨析题
1. (10 分)对于 t="aababbaaabb" p = “aabb” , 进行 KMP 快速模式匹配,请 画出匹配过程的示意图。建议采用教材的定义,如果采用其他教材的定义
场; 3. 正式考试(包括发卷和收卷)过程中,不与考场的同学交谈或借物品,有问
相关文档
最新文档