2011内蒙古自治区数据结构(C++)考资料
- 格式:pdf
- 大小:86.24 KB
- 文档页数:2
1、设一棵二叉树的结点结构为 (LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p 和q分别为指向该二叉树中任意两个结点的指针,试编写一算法ANCESTOR(ROOT,p,q,r),该算法找到p和q的最近共同祖先结点r。
2、二叉树的层次遍历序列的第一个结点是二叉树的根。
实际上,层次遍历序列中的每个结点都是“局部根”。
确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左根右”三部分。
若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。
这样,定义一个全局变量指针R,指向层次序列待处理元素。
算法中先处理根结点,将根结点和左右子女的信息入队列。
然后,在队列不空的条件下,循环处理二叉树的结点。
队列中元素的数据结构定义如下:typedef struct{ int lvl; //层次序列指针,总是指向当前“根结点”在层次序列中的位置int l,h; //中序序列的下上界int f; //层次序列中当前“根结点”的双亲结点的指针int lr; // 1—双亲的左子树 2—双亲的右子树}qnode;BiTree Creat(datatype in[],level[],int n)//由二叉树的层次序列level[n]和中序序列in[n]生成二叉树。
n是二叉树的结点数{if (n<1) {printf(“参数错误\n”); exit(0);}qnode s,Q[]; //Q是元素为qnode类型的队列,容量足够大init(Q); int R=0; //R是层次序列指针,指向当前待处理的结点BiTree p=(BiTree)malloc(sizeof(BiNode)); //生成根结点p->data=level[0]; p->lchild=null; p->rchild=null; //填写该结点数据for (i=0; i<n; i++) //在中序序列中查找根结点,然后,左右子女信息入队列if (in[i]==level[0]) break;if (i==0) //根结点无左子树,遍历序列的1—n-1是右子树{p->lchild=null;s.lvl=++R; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(Q,s);}else if (i==n-1) //根结点无右子树,遍历序列的1—n-1是左子树{p->rchild=null;s.lvl=++R; s.l=1; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);}else //根结点有左子树和右子树{s.lvl=++R; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(Q,s);//左子树有关信息入队列s.lvl=++R; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(Q,s);//右子树有关信息入队列}while (!empty(Q)) //当队列不空,进行循环,构造二叉树的左右子树{ s=delqueue(Q); father=s.f;for (i=s.l; i<=s.h; i++)if (in[i]==level[s.lvl]) break;p=(bitreptr)malloc(sizeof(binode)); //申请结点空间p->data=level[s.lvl]; p->lchild=null; p->rchild=null; //填写该结点数据if (s.lr==1) father->lchild=p;else father->rchild=p; //让双亲的子女指针指向该结点if (i==s.l){p->lchild=null; //处理无左子女s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s);}else if (i==s.h){p->rchild=null; //处理无右子女s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);}else{s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);//左子树有关信息入队列s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s); //右子树有关信息入队列}}//结束while (!empty(Q))return(p);}//算法结束3、假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。
数据结构期末考试复习题资料一.单项选择题1.算法指的是()。
A.计算方法B.排序方法C.特定问题求解步骤的描述D.调度方法2.下列数据结构中,()是非线性结构。
A.栈B.队列C.完全二叉树D.堆3.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表B.双向链表C.单循环链表D.带头结点的双循环链表4.队列的操作原则是()A.先进先出B.后进先出C.先进后出D.不分顺序5.栈和队列的共同特点是()。
A.都是先进先出B.都是先进后出C.都是只允许在端点处插入和删除D.没有共同点6.在一棵高度为k 的满二叉树中,结点总数为()。
A.2k-1 B.2k C.2k-1 D.⎣log 2 k ⎦+ 17.在下列存储形式中,哪一个不是树的存储形式?()A.双亲链表表示法B.孩子链表表示法C.孩子兄弟链表表示法D.顺序存储表示法8.n 个结点的完全有向图含有边的数目为()。
A.n*n B.n*(n+1) C.n/2 D.n*(n-1)9.n 个顶点的强连通图至少有()条边。
A.n B.n-1 C.n+1 D.n(n-1)10、高度为k 的二叉树的最大结点数为()。
A、2kB、2k-1C、2k–1D、2k-1–111、下列哪一种图的邻接矩阵是对称矩阵?()A、有向图B、无向图C、AOV 网D、AOE 网12、在下列存储形式中,哪一个不是树的存储形式?()A、双亲表示法B、孩子表示法C、孩子兄弟表示法D、顺序存储表示法13、下面哪一方法可以判断出一个有向图是否有环。
()A、深度优先遍历B、拓扑排序C、求最短路径D、广度优先遍历14.适用于折半查找的表的存储方式及元素排列要求为()。
A.链接方式存储,元素无序B.链接方式存储,元素有序C.顺序方式存储,元素无序D.顺序方式存储,元素有序15、一个算法应该是()。
A、程序B、特定问题求解步骤的描述C、要满足五个基本特性D、A 和C16、算法分析的两个主要方面是()。
数据结构(C语言版)习题参考答案数据结构(C语言版)习题参考答案1. 数据结构简介数据结构是计算机科学中重要的概念之一,它关注如何组织和存储数据,以便有效地进行访问和操作。
C语言是一种广泛应用于数据结构实现的编程语言。
本文将提供一些常见数据结构习题的参考答案,帮助读者理解和掌握数据结构的基本概念与实现。
2. 数组数组是一种线性结构,存储具有相同数据类型的元素。
以下是一些数组习题的参考答案:2.1 统计数组中某个元素出现的次数```int countOccurrences(int arr[], int n, int x) {int count = 0;for (int i = 0; i < n; i++) {if (arr[i] == x) {count++;}}return count;}```2.2 查找数组中的最大值和最小值```void findMinMax(int arr[], int n, int* min, int* max) { *min = arr[0];*max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < *min) {*min = arr[i];}if (arr[i] > *max) {*max = arr[i];}}}```3. 链表链表是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。
以下是一些链表习题的参考答案:3.1 反转链表```Node* reverseLinkedList(Node* head) {Node* prev = NULL;Node* curr = head;while (curr != NULL) {Node* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}```3.2 合并两个有序链表```Node* mergeLists(Node* list1, Node* list2) {if (list1 == NULL) {return list2;}if (list2 == NULL) {return list1;}if (list1->data < list2->data) {list1->next = mergeLists(list1->next, list2);return list1;} else {list2->next = mergeLists(list1, list2->next);return list2;}}```4. 栈和队列栈和队列是两种重要的线性数据结构,栈支持后进先出(LIFO),队列支持先进先出(FIFO)。
2011年——2012年第二学期《数据结构》期末试卷(A)一、选择题:(每小题2分,共30分)1、如果在表示树的孩子兄弟链中有6个空的左指针域,7个空的右指针域,5个结点左、右指针域都为空,则该树中树叶的个数( B )A、有7个B、有6个C、有5个D、不能确定2、数据结构是一门研究( B )的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科。
A、数值计算B、非数值计算C、混合计算D、简单计算3、如果用孩子兄弟链来表示一棵具有n(n>1)个结点的树,则在二叉链表中( B )A、至少有n-1个非空的右指针域B、至少有2个空的右指针域C、至少有2个非空的左指针域D、至少有n-1个空的右指针值域4、数据结构在计算机内存中的表示是指( A )。
A、数据的存储结构B、数据结构C、数据的逻辑结构D、数据元素之间的关系5、计算机处理的对象之间通常存在着的一种最简单的线性关系,这类数学模型称( A )。
A、线性的数据结构B、图的数据结构C、格局D、树型数据结构6、算法的主要任务是分析( D )A、算法是否具有较好的可读性B、算法中是否存在语法错误C、算法的功能是否符合设计要求D、算法执行时间和问题规模之间的关系7、用孩子链存储结构表示树,其优点之一是( D )比较方便A、判断两个指定结点是不是兄弟B、找指定的结点双亲C、判断指定结点在第几层D、计算指定结点的度数8、线性表采用链式存储结构时,其地址( D )A、必须是连续的B、一定是不连续的C、部分地址必须是连续的D、连续与否均可以9、在一个单链表中,删除*p结点之后的一个结点操作是( D )A、p next=p;B、p next next=p next;C、p next next=p;D、p next=p next next;10、栈和队列的共同点是( C )A、都是先进后出B、都是先进先出C、只允许在端点处插入和删除元素D、没有共同点11、元素ABCD依次进栈后,栈顶元素是( D )栈底元素是(A )A、AB、BC、CD、D12、串是( D )A、不少于一个字母的序列B、任意个字母的序列C、不少于一个字符的序列D、有限个字符的序列13、串是一种特殊的线性体现在( B )A、可以顺序存储B、数据元素是一个字符C、可以链接存储D、数据元素可以是多个字符14、对于一棵具有n个结点,度为4的树来说,( A )。
内蒙古自治区考研计算机科学与技术复习资料数据结构常考题目数据结构是计算机科学与技术考研的重要考点之一。
下面将为考生们提供一些内蒙古自治区计算机科学与技术考研的数据结构常考题目,供大家参考复习。
1. 顺序存储和链式存储的区别是什么?请举例说明。
顺序存储是在内存中按照线性顺序存储数据元素,通过数组实现。
链式存储是通过节点之间的指针链接来存储数据元素。
以实现线性表为例,顺序存储在内存中分配连续的存储空间,每个元素的存储位置可以通过索引计算得到。
而链式存储通过节点的next指针将各个节点链接在一起,每个节点存储数据元素以及指向下一个节点的指针。
2. 什么是栈和队列?它们的特点和应用场景分别是什么?栈是一种后进先出(LIFO)的数据结构,只允许在一端进行插入和删除操作。
栈的特点是只能访问栈顶元素,插入和删除操作都在栈顶进行,如函数调用栈、表达式求值等场景常使用栈来实现。
队列是一种先进先出(FIFO)的数据结构,允许在一端进行插入操作,在另一端进行删除操作。
队列的特点是只能访问队头和队尾元素,插入和删除操作分别在队尾和队头进行,如打印任务队列、消息队列等场景常使用队列来实现。
3. 请解释什么是二叉树和二叉搜索树,并给出它们的示例。
二叉树是每个节点最多有两个子节点的树结构。
每个节点最多有两个子节点,一个是左子节点,另一个是右子节点。
二叉搜索树是一种特殊的二叉树,它的左子树中的节点值小于根节点的值,右子树中的节点值大于根节点的值。
示例:5/ \3 7/ \2 44. 请解释什么是图和树的区别,并给出它们的应用场景。
树是一种特殊的图,它没有回路的图被称为树。
树具有层级结构,根节点位于最顶层,叶子节点位于最底层。
图是由节点和边组成的一种数据结构,节点之间的连接关系由边表示。
图是一种更为普遍的数据结构,可以是有向图或无向图,节点之间的关系可以是多对多的。
树的应用场景包括文件系统、家谱、网络拓扑结构等。
图的应用场景包括社交网络、地图导航、网络拓扑分析等。
内蒙古自治区考研计算机科学复习资料数据结构重要题型归纳数据结构是计算机科学与技术领域中的基础课程之一,对于考研学生来说,熟练掌握数据结构的各种题型是必不可少的。
本文将从内蒙古自治区考研的角度出发,对数据结构中的重要题型进行归纳总结,供考生参考。
1. 数组和链表数组和链表是数据结构中最基本的两种数据类型,也是考研中经常出现的重要题型。
在解题过程中,考生需要理解数组和链表的基本概念和特点,并掌握它们的插入、删除、查找等操作。
2. 栈和队列栈和队列是常用的线性数据结构,同样也是考研中的热门考点。
考生需要了解栈和队列的特点,掌握它们的基本操作,如入栈、出栈、入队、出队等,并能够根据题目要求选择合适的数据结构进行解题。
3. 串串是由零个或多个字符组成的有限序列,字符串处理在计算机科学中有着广泛的应用。
考生需要了解串的基本操作,如串的比较、复制、连接等,并能够灵活运用相关算法解决与串相关的问题。
4. 树树是一种重要的非线性数据结构,常用于组织和存储具有层次关系的数据。
在考研中,二叉树及其派生结构是重点考点之一。
考生需要熟悉树的基本概念,掌握二叉树的各种遍历方式,如前序遍历、中序遍历、后序遍历等,并能够应用相关算法解决与树相关的问题。
5. 图图是由顶点和边组成的一种复杂数据结构,广泛应用于网络、社交等领域。
在考研中,图的基本概念和算法也是重要的考点。
考生需要了解图的表示方法,掌握图的遍历算法,如深度优先搜索(DFS)和广度优先搜索(BFS),并能够根据题目要求选择合适的算法解决与图相关的问题。
6. 排序和查找排序和查找是数据结构中非常重要的两个方面。
常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序等,考生需要理解各种排序算法的原理和特点,并能够根据题目要求选择合适的排序算法解决问题。
查找算法包括线性查找、二分查找、哈希查找等,考生需要了解各种查找算法的原理和适用场景,并能够根据题目要求选择合适的查找算法解决问题。
数据结构(C语言版)考研复习题第1 页共19 页第一章绪论1.1 简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线性结构、非线性结构。
1.2 常用的存储表示方法有哪几种?1.3 算法的时间复杂度仅与问题的规模相关吗?1.4 有时为了比较两个同数量级算法的优劣,须突出主项的常数因子,而将低次项用大"O"记号表示。
例如,设T1(n)=1.39nlgn+100n+256=1.39nlgn+O(n), T2(n)=2.0nlgn-2n=2.0lgn+O(n), 这两个式子表示,当n足够大时T1(n)优于T2(n),因为前者的常数因子小于后者。
请用此方法表示下列函数,并指出当n足够大时,哪一个较优,哪一个较劣?函数大"O"表示优劣(1) T1(n)=5n22-3n+60lgn 5n22+O(n)(2) T2(n)=3n22+1000n+3lgn 3n22+O(n)(3) T3(n)=8n22+3lgn 8n22+O(lgn)(4) T4(n)=1.5n2+6000nlgn 1.5n2+O(nlgn)第二章线性表2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?2.3 为什么在单循环链表中设置尾指针比设置头指针更好?2.4 下述算法的功能是什么?LinkList Demo(LinkList L){ // L 是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo2.5设线性表的n个结点定义为(a0,a1,...a n-1),重写顺序表上实现的插入和删除算法:InsertList 和DeleteList.2.6 设顺序表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。
1、以下属于顺序存储结构优点的是( A )。
A) 存储密度大B) 插入运算方便
C)删除运算方便D)可方便地用于各种逻辑结构的存储表示
2、下面程序段的时间复杂度是( A )。
s =0;
for( i =0; i<n; i++)
for(j=0;j<n;j++)
s +=B[i][j];
sum = s ;
A) O(n2) B) O(n)
C) O(m*n) D)O(1)
3、有一个有序表{1,4,6,10,18,35,42,53,67,71,78,84,92,99}。
当用二分查找法查找键值为84的结点时,经( B )比较后查找成功。
A) 4 B)3 C)2 D)12
4、在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为( C )。
A)top不变 B)top=0 C)top-- D)top++
5、( C )在进行插入操作时,常产生假溢出现象。
A)顺序栈 B)循环队列
C)顺序队列 D)链队列
6、设给定问题的规模为变量n,解决该问题的算法所需时间为Tn=O(f(n)),Tn表示式中记号O表示( A )。
A)一个数量级别 B)一个平均值
C)一个最大值 D)一个均方值
7、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
A) 单链表 B) 仅有头指针的单循环链表
C) 双链表 D) 仅有尾指针的单循环链表
8、n个顶点的图的最小生成树必定( D ),是不正确的描述。
A)不唯一 B)权的总和唯一
C)不含回路 D)有n条边
9、向一个栈顶指针为hs的链栈中插入一个s结点时,应执行( D )。
A) hs->next=s; B) s->next=hs->next; hs->next=s;
C) s->next=hs; hs=s; D) s->next=hs; hs=hs->next;
10、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是( B )。
A)9 B)11 C)15 D)不能确定
11、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a??11为第一个元素,其存储地址为1,每元素占1个地址空间,则a85的地址为( B )。
A)13 B)33 C)18 D)40
12、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是( B )。
A)9 B)11 C)15 D)不能确定
13、下列序列中,执行第一趟快速排序后得到的序列是( A )。
A)[d,a,e,d,b]f[h,g] B) [c,e,a,d]f[h,g,b]
C) [g,a,e,c,b]f[d,h] D) [a,b,c,d,]f[e,g,h]
14、有一个有序表{1,4,6,10,18,35,42,53,67,71,78,84,92,99}。
当用二分查找法查找键值为84的结点时,经( B )比较后查找成功。
A) 4 B)3 C)2 D)12
15、广义表head(((a,b),(c,d)))的运算结果为( A )。
A)(a,b) B)(c,d)
C)空表 D)((a,b),(c,d))。