数据结构第二次单元测试

合集下载

数据结构练习题第二章答案

数据结构练习题第二章答案

数据结构练习题第二章答案一、选择题1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一的关系B. 元素之间存在一对多的关系C. 元素之间存在多对多的关系D. 元素之间存在一对一或一对多的关系答案:D2. 栈(Stack)是一种特殊的线性表,其特点是:A. 允许在表的一端进行插入和删除操作B. 允许在表的两端进行插入和删除操作C. 只能在表的两端进行插入和删除操作D. 只能在表的中间进行插入和删除操作答案:A3. 队列(Queue)与栈的主要区别在于:A. 队列是先进先出(FIFO),栈是先进后出(LIFO)B. 栈是先进先出(FIFO),队列是先进后出(LIFO)C. 队列和栈都是先进先出(FIFO)D. 队列和栈都是先进后出(LIFO)答案:A二、简答题1. 什么是链表?链表有哪些基本操作?答案:链表是一种由一系列节点组成的线性数据结构,每个节点包含数据部分和指向下一个节点的指针。

链表的基本操作包括插入节点、删除节点、查找节点和遍历链表。

2. 线性表的顺序存储结构和链式存储结构有何区别?答案:顺序存储结构使用连续的存储单元来存储数据元素,如数组。

链式存储结构不要求数据元素在存储空间中连续,每个元素包含指向下一个元素的指针,如链表。

三、编程题1. 编写一个函数,实现在单链表中插入一个新节点到指定位置。

```c#include <stdio.h>#include <stdlib.h>typedef struct Node {int data;struct Node *next;} Node;Node* createNode(int data) {Node *newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;return newNode;}void insertNode(Node head, int position, int data) {Node *newNode = createNode(data);if (position == 0) {newNode->next = *head;*head = newNode;} else {Node *current = *head;for (int i = 0; current != NULL && i < position - 1; i++) {current = current->next;}if (current == NULL) return; // Position is greater than the number of nodesnewNode->next = current->next;current->next = newNode;}}int main() {Node *head = NULL;insertNode(&head, 0, 10);insertNode(&head, 1, 20);// Print the list to verify the insertionNode *current = head;while (current != NULL) {printf("%d ", current->data);current = current->next;}return 0;}```四、分析题1. 分析栈的后进先出(LIFO)特性在实际应用中的优势和局限性。

数据结构--第二章考试题库(含答案)

数据结构--第二章考试题库(含答案)

第2章线性表一选择题1.下述哪一条是顺序存储结构的优点?()【北方交通大学 2001 一、4(2分)】A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学 2001 一、14(2分)】A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

3.线性表是具有n个()的有限序列(n>0)。

【清华大学 1998 一、4(2分)】A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

【哈尔滨工业大学 2001二、1(2分)】A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。

【南开大学 2000 一、3】A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。

A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学 2000 一、1(2分)】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。

则采用()存储方式最节省运算时间。

【北京理工大学 2000一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001 六、2(2分)】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址9. 链表不具有的特点是()【福州大学 1998 一、8 (2分)】A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((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、线性表采用顺序存储,必须占用一片连续的存储单元。

数据结构5-6章测试题(带答案)

数据结构5-6章测试题(带答案)

《数据结构》第2教学单元测试练习题一.选择1.将一棵有100个结点的完全二叉树从根结点这一层开始,每一层上从左到右依次对结点编号,根结点的编号为1,则编号为49的结点的左孩子编号为()根? 右孩子?A.98B.99C.50D.482.以下说法错误的是( )A.一般在赫夫曼树中,权值越大的叶子离根结点越近B.赫夫曼树中没有度数为1的分支结点C.若初始森林中共有n棵二叉树,最终求得的赫夫曼树共有2n-1个结点D.若初始森林中共有n棵二叉树,进行2n-1次合并后才能剩下一棵最终的赫夫曼树3.深度为6的二叉树最多有( )个结点A.64 B.63 C.32 D.314.以下说法正确的是( )A.任何一棵二叉树中至少有一个结点的度为2B.任何一棵二叉树中每个结点的度都为2C.任何一棵二叉树的度肯定等于2D.任何一棵二叉树的度可以小于25.设森林T中有4棵树,第一、二、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的右子树上有( d )个结点。

根结点的左孩子上有( a )个结点。

A.n1-1B.n1C.n1+n2+n3D.n2+n3+n46.对含有( )个结点的非空二叉树,采用任何一种遍历方式,其结点访问序列均相同。

A.0B.1C.2D.不存在这样的二叉树7.讨论树、森林和二叉树的关系,目的是为了( )A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义8.已知某二叉树的后续遍历序列是dabec,中序遍历序列是deabc,它的前序遍历序列是( )A.acbedB.deabcC.decabD.cedba9.如果T2是由有序树T转化而来的二叉树,那么T中结点的前序就是T2中结点的( a ), 后序就是T2中结点的( b ) A.前序 B.中序 C.后序 D.层次序10.深度为5的二叉树至多有( )个结点。

数据结构试题及答案!!!

数据结构试题及答案!!!

一、单选题(每题 2 分,共20分)1. 1.对一个算法的评价,不包括如下(B )方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行(A )。

A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3. 3.对线性表,在下列哪种情况下应当采用链表表示?( B )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35. 5.AOV网是一种( D )。

A.有向图B.无向图C.无向无环图D.有向无环图6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度(B )。

A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.7.若需要利用形参直接访问实参时,应将形参变量说明为(D )参数。

A.值B.函数C.指针D.引用8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的(A )。

A.行号B.列号C.元素值D.非零元素个数9.9.快速排序在最坏情况下的时间复杂度为(D )。

A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C )。

A. O(n)B. O(1)C. O(log2n)D. O(n2)二、二、运算题(每题 6 分,共24分)1. 1.数据结构是指数据及其相互之间的______联系______。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案1. 简答题1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括数据的逻辑结构和物理结构。

1.2 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括线性表、栈、队列和串;非线性结构包括树和图。

1.3 数据结构的逻辑结构有哪些?数据结构的逻辑结构包括线性结构、树形结构和图形结构。

1.4 数据结构的物理结构有哪些?数据结构的物理结构包括顺序存储结构和链式存储结构。

1.5 什么是算法?算法是指求解问题的具体步骤和方法。

1.6 算法的特性有哪些?算法应具有有穷性、确定性、可行性和输入输出性。

2. 选择题2.1 在栈的顺序存储结构中,栈的存储位置是:A. 自顶向下递增B. 自底向上递增C. 自底向上递减D. 自顶向下递减答案:D2.2 下列哪个数据结构不适合表示有父子关系的数据?A. 二叉树B. 图C. 链表D. 堆答案:D2.3 对于一棵完全二叉树,叶子节点的个数为n,则树中节点的总数为:A. 2nB. 2n + 1C. nD. n + 1答案:A2.4 假设有一个长度为10的栈,初始时栈为空,若对该栈连续执行5次入栈操作,然后执行4次出栈操作,最后执行1次入栈操作,则栈中剩余的元素个数为:A. 0B. 1C. 4D. 6答案:D3. 编程题3.1 实现一个栈数据结构的基本操作,包括入栈、出栈、获取栈顶元素和判断栈是否为空。

```Pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if self.is_empty():return Nonereturn self.items.pop()def peek(self):if self.is_empty():return Nonereturn self.items[-1]```3.2 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。

2020智慧树知道网课《数据结构(中国海洋大学)》课后章节测试满分答案

2020智慧树知道网课《数据结构(中国海洋大学)》课后章节测试满分答案

第一章测试1【单选题】(2分)图书馆的数目检索系统采用关系的数据结构。

A.树形B.图状C.集合D.线性2【单选题】(2分)是相互之间存在一种或多种特定关系的数据元素的集合。

A.数据项B.数据结构C.数据元素D.数据3【单选题】(2分)()是一个值的集合和定义在这个值集上的一组操作的总称。

A.数据项B.数据类型C.数据元素D.数据结构4【单选题】(2分)算法的确定性是指()A.算法中没有逻辑B.在任何情况下,算法不会出现死循环C.算法中的每一条指令必须有确切的含义D.当输入数据非法时,算法也能作出反应或进行处理第二章测试1【单选题】(2分)线性表中的数据元素有一个前驱多个后继。

A.错B.对2【单选题】(2分)用顺序结构存储,删除最后一个结点时,()A.其它B.会移动其它结点位置C.可能会移动其它结点位置D.一定不会移动其它结点位置3【单选题】(2分)链表中逻辑上相邻的元素的物理地址__________相邻。

A.一定不B.必定C.其它D.不一定4【单选题】(2分)1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。

//将合并逆置后的结果放在C表中,并删除B表StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C){LinkListpa,pb,qa,qb;pa=A;pb=B;qa=pa;//保存pa的前驱指针qb=pb;//保存pb的前驱指针pa=pa->next;pb=pb->next;A->next=NULL;C=A;while(pa&&pb){if(pa->data<pb->data){qa=pa;pa=pa->next;qa->next=A->next;//将当前最小结点插入A表表头A->next=qa;}else{qb=pb;pb=pb->next;()//将当前最小结点插入B表表头A->next=qb;}}while(pa){qa=pa;pa=pa->next;qa->next=A->next;A->next=qa;}while(pb){qb=pb;pb=pb->next;qb->next=A->next;A->next=qb;}pb=B;free(pb);returnOK;}A.qa->next=A->nextB.qa->next=A;C.qb->next=A->nextD.qb->next=A;5【单选题】(2分)假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。

数据结构-试卷二及答案

数据结构-试卷二及答案

数据结构-试卷二及答案一、判断(每小题 1 分,共 10 分) 1.数据的存储结构是数据的逻辑结构的存储映象,不仅要存储数据元素的值,还要存储元素之间的相互关系。

2.用顺序表来存储线性表时,不需要另外开辟空间来保存数据元素之间的相互关系。

3.完全二叉树的叶子结点只能出现在最后一层上。

4.折半查找方法要求待查表必须是有序的顺序表。

5.在有向图 G 中, V 2 , V 1 和 V 1 , V 2 是两条不同的边。

6.图的最小生成树是唯一的。

7.从循环单链表的某一结点出发,只能找到它的后继结点,不能找到它的前趋结点。

8.在单链表中,头结点是必不可少的。

9.对快速排序来说,初始序列为正序和反序,都是最坏情况。

10.广义表是特殊的线性表。

二、选择(每题 1 分,共 15 分) 1.设栈 S 和队列 Q 的初始状态均为空,元素 abcdefg 依次进入栈 S 。

若每个元素出栈后立即进入队列 Q ,且 7 个元素出队的顺序是bdcfeag ,则栈 S 的容量至少是()。

A.1 B.2 C.3 D.4 2.下列线索二叉树1/ 8中(用虚线表示线索),符合后序线索树定义的是( )。

3.已知广义表 A= (( a,b ) ,(c,d) ) , 则 head(A) 等于 ( )。

A.(a,b) B.((a,b)) C.a,b D.a 4.设字符串s1=‘ABCDEFG’,s2=‘PQRST’, 则运算s=strcat(strsub(s1,2,strlen(s2)),strsub (s1,strlen(s2),2))后结果为()。

A.BCQR B.BCDEF C.BCDEFG D.BCDEFEF 5.具有 8 个顶点的连通图的深度优先生成树,其边数为()。

A.8 B.9 C.7 D.6 6.算法分析的两个主要方面是()。

A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 7.下列四种排序中()的空间复杂度最大。

数据结构与算法单元测试题2及答案

数据结构与算法单元测试题2及答案

一、单选题1、若串S= 'software',其前缀真子串的数目是()。

A.9B.8C.7D.10正确答案:C2、两个串相等的充要条件是()。

A.两个字符串的长度相等且对应位置上的字符也相等B.两个字符串的长度相等C.两个字符串中对应位置上的字符相等D.两个字符串存储形式相同正确答案:A3、函数strcmp('stcabuc','stbabuc')的返回值是()。

A.1B.-1C.0D.2正确答案:A4、StrIndex (‘DATASTRUCTURE',1,‘STR')= ()。

A.9B.5C.3D.7正确答案:B5、设正文串长度为n,模式串长度为m,则模式匹配的KMP算法的时间复杂度为()。

A.O(n)B.O(m)C.O(m+n)D.O(m*n)正确答案:C6、设S="",则LenStr(S)=()。

A.1B.2C.3D.0正确答案:D7、设目标串T="aabaababaabaa",模式P="abab",朴素匹配算法的外层循环进行了( )次。

A.5B.9C.4D.1正确答案:A8、若串S='SOFT',其子串的数目最多是()。

A.9B.12C.10D.11正确答案:D9、设串S1='ABCDEFG',S2='PQRST' ,则ConcatStr(SubStr(S1,2,LenStr(S2)),SubStr(S1,LenStr(S2),2))的结果串为( )。

A.'BCPQRST'B.'BCDEFEF'C.'BCDEF'D.'BCDEFG'正确答案:B10、某串的长度小于一个常数,则采用()存储方式最节省空间。

A.堆结构B.顺序C.链式D.无法确定正确答案:B11、二维数组A的每个元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则如果A按行存放元素A[8][5]的起始地址与A按列存放时元素()的起始地址一致。

数据结构第二单元测验题目的参考答案

数据结构第二单元测验题目的参考答案

数据结构第二单元测验答案一、选择题1.由3 个结点可以构造出多少种不同的有向树( )A.2B.3C.4D.52.由3 个结点可以构造出多少种不同的二叉树( d)A.2B.3C.4D.53.二叉树的第I层上最多含有结点数为(c )A.2IB.2I-1-1C.2I-1D.2I -14.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( b )结点A.2hB.2h-1C.2h+1D.h+1除第一层外,每层最少2个结点5.一棵树高为K的完全二叉树至少有( c )个结点A.2k–1B.2k-1–1C.2k-1D.2k6.深度为6的二叉树最多有( c )个结点A.64 B.63 C.32 D.317.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( )A.5B.6C.7D.88.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( c )A.9B.11C.15D.不确定9.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( e )A.250B.500C.254D.505 E.以上答案都不对10.对于有n 个结点的二叉树, 其高度为( d )A.nlog2nB.log2nC.⎣log2n⎦|+1D.不确定11.将含有83个结点的完全二叉树从根结点开始编号,根为1号,按从上到下.从左到右顺序结点编号,那么编号为41的双亲结点编号为()A.42B.40C.21D.2012.一个二叉树按顺序方式存储在一个维数组中,如图0 1 2 3 4 5 6 7 8 9 10 11 12 13 14A B C D E F G H I J则结点E在二叉树的第(c )层。

A. 1B. 2C. 3D.413.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是( b)的二叉树A.空或只有一个结点B.高度等于其结点数C.任一结点无左孩子D.任一结点无右孩子14.任何一棵二叉树的叶结点在其先根.中根.后根遍历序列中的相对位置( c )A.肯定发生变化B.有时发生变化C.肯定不发生变化D.无法确定15.二叉树线索化后,仍不能有效求解的问题是(d )A.先序线索二叉树中求先序后继B.中序线索二叉树中求中序后继C.中序线索二叉树中求中序前驱D.后序线索二叉树中求后续后继一共有两种情况:一个是先序线索中求先序前驱和后序线索求后序后继16.如果T2是由有序树T转化而来的二叉树,那么T中结点的前序就是T2中结点的( a )A.前序B.中序C.后序D.层次序17.设森林T中有4棵树,第一.二.三.四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的右子树上有( d )个结点。

数据结构各章自测题及答案

数据结构各章自测题及答案

第一章概论 自测题答案一、填空题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的 操作对象 以及它们之间的 关系 和运算等的学科。

2. 数据结构被形式地定义为(D, R ),其中D 是 数据元素 的有限集合,R 是D 上的 关系 有限集合。

3. 数据结构包括数据的 逻辑结构 、数据的 存储结构 和数据的 运算 这三个方面的内容。

4. 数据结构按逻辑结构可分为两大类,它们分别是 线性结构 和 非线性结构 。

5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。

6. 在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点 没有 后续结点,其余每个结点有且只有1个后续结点。

7. 在树形结构中,树根结点没有 前驱 结点,其余每个结点有且只有 1 个前驱结点;叶子结点没有 后续 结点,其余每个结点的后续结点数可以任意多个 。

8. 在图形结构中,每个结点的前驱结点数和后续结点数可以 任意多个 。

9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序 、 链式 、 索引 和 散列 。

10. 数据的运算最常用的有5种,它们分别是插入 、 删除、修改、 查找 、排序。

11. 一个算法的效率可分为 时间 效率和 空间 效率。

二、单项选择题( B )1. 非线性结构是数据元素之间存在一种:A )一对多关系B )多对多关系C )多对一关系D )一对一关系( C )2. 数据结构中,与所使用的计算机无关的是数据的 结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储( C )3. 算法分析的目的是:A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性( A )4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性 B) 正确性和简明性C) 可读性和文档性 D) 数据复杂性和程序复杂性( C )5. 计算机算法指的是:A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法( B )6. 计算机算法必须具备输入、输出和 等5个特性。

数据结构智慧树知到答案章节测试2023年内蒙古民族大学

数据结构智慧树知到答案章节测试2023年内蒙古民族大学

绪论单元测试1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称这为( )。

A:顺序存储结构B:链式存储结构C:存储结构D:逻辑结构答案:A2.算法的时间复杂度取决于()。

A:问题的可解性B:待处理数据的初态C:问题的复杂度D:问题的规模答案:BD3.从逻辑上可以把数据结构分为( )。

A:非线性结构B:物理结构C:线性结构D:静态结构答案:AC4.除了考虑存储数据结构本身所占用的空间外,实现算法所用辅助空间的多少称为算法的( )。

A:空间效率B:软件效率C:硬件效率D:时间效率答案:A5.链式存储的存储结构所占存储空间( )。

A:分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B:只有一部分,存储表示结点间关系的指针C:分两部分,一部分存放结点值,另一部分存放指向下一结点的地址D:只有一部分,存放结点值答案:AC6.设语句X++的时间是单位时间,则语句。

for(I=1;I<=n;I++)x++;的时间复杂度为( )A:O(n3)B:O(n2)C:O(n)D:O(1)答案:C7.对一个算法的评价,不包括如下()方面的内容。

A:时空复杂度B:健壮性和可读性C:计算性D:并行性答案:CD8.以下数据结构中哪一个是非线性结构 ( )A:二叉树B:队列C:线性表D:栈答案:A9.逻辑结构与数据元素本身的内容和形式无关()A:对B:错答案:A10.基于某种逻辑结构之上的基本操作,其实现是唯一的。

()A:对B:错答案:B第一章测试1.非空的循环单链表head的尾结点(由p指向)满足()。

A:p→next==headB:p==NULLC:p==headD:p→next==NULL答案:A2.带头结点head的单链表为空的判定条件是()。

A:head->next==headB:head->next==NULLC:head!==NULLD:head==NULL答案:B3.在长度为n的顺序表的第i个位置上插入一个元素(1≤ i ≤n+1),元素的移动次数为()。

数据结构第二次实验报告

数据结构第二次实验报告

数据结构课程设计报告题目:魔王语言解释院系:信息学院班级:信管11-1姓名:丁升学号:201101050905指导教师:张晓庆实习报告题目:编制一个魔王语言翻译的程序班级:信息管理与信息系统11-1 姓名:丁升学号:201101050905 完成日期:2013.6.5一、需求分析1. 本演示程序中,魔王语言限制在小写字母‘a’-‘z’之间,且必须限制在括号内以及大写字母A和B。

且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。

2. 魔王语言遵守如下规则:(θδ1δ2δ3…δn)→θδnθδn-1…θδ1θB→tAdA A→sae3. 演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。

4. 程序的执行命令有:1)选择操作 2)任意键结束5. 数据测试B(ehnxgz)B解释成:tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。

二、概要设计为实现上述功能,需要栈和队列两个抽象数据类型。

1. 栈抽象数据类型定义ADT stack{数据对象:D={ai|ai∈Elemset,i=1,2,3,…n,n>=0}基本操作:InitStack(&s)操作结果:构造一个空栈s。

Push(&s, e)初始条件:栈s已存在。

操作结果:插入元素e为新的栈顶元素。

Pop(&s, &e)初始条件:栈s已存在且非空。

操作结果:删除栈s的栈顶元素,并用e返回其值。

StackLenth(&s)初始条件:栈s已存在。

操作结果:返回s的元素个数,即栈的长度。

ClearStack(&s)初始条件:栈s已存在。

操作结果:将s清为空栈。

(完整word版)数据结构试题试卷二含答案

(完整word版)数据结构试题试卷二含答案

模拟试题二模拟试题二一、选择题(28分)1.设一数列的顺序为l,2,3,4,5,通过栈结构不可能排成的顺序数列为( )。

A)3,2,5,4,l B)1,5,4,2,3C)2,4,3,5,l D)4,5,3,2,l2。

二叉树的第3层最少有()个结点。

A)0 B)1 C)2 D)33。

—个n个顶点的连通无向图,其边的个数至少为( )。

A) n-l B)n C)n+l D)nlogn4。

下列排序方法中,( )的比较次数与记录的初始排列状态无关。

A)直接插入排序 B)起泡排序C)快速排序 D)直接选择排序5.-棵哈夫曼树总共有II个结点,则叶子结点有( )个。

A)5 B)6 C)7 D)96.已知某算法的执行时间为(n+n2)+log2(n+2),n为问题规模,则该算法的时间复杂度是( )。

A)O(n)B)O(n2) C)O(log2n)D)O(nlog2n)7。

如果一棵树有10个叶子结点,则该树总共至少有( )个结点。

A)lO B)11 C)19 D) 218。

—个100×100的三角矩阵a采用行优先压缩存储后,如果首元素a[0][0]是第一个元素,那么a[4] [2]是第( )个元素。

A)13 B) 401 C) 402 D)4039.有一棵二叉树如题图1,该树是()。

A)二叉平衡树B)二叉排序树C)堆的形状D)以上都不是10。

对于含有n个顶点e条边的无向连通图,利用Prim算法生成最小代价生成树,其时间复杂度为(),利用Kruska算法的时间复杂度为().A)O(log2n) B)0(n2) C)O(ne) D)O(elog2ne)11.具有n个顶点的完全有向图的边数为( ).A)n(n—l)/2 B)n(n-l) C) n2 D)n2—112。

设有100个元素,用折半查找时,最大比较次数为(),最小比较次数为()。

A)25 B)7 C) 10 D)l13。

在内部排序中,排序时不稳定的有().A)插入排序B)冒泡排序C)快速排序D)归并排序14.串是一种特殊的线性表,其特殊性体现在()。

数据结构第二次单元测试题库(串到树)

数据结构第二次单元测试题库(串到树)

一、判断题四.串1、确定串T在串S中首次出现的位置的操作称为串的模式匹配。

()2、如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。

()3、一个任意串是其自身的子串。

()1、∨2、Χ3、∨五.数组和广义表1、多维数组是向量的推广。

()/*数组和广义表线性表在含义上的扩展*/2、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。

()/*顶点*/3、除插入和删除操作外,数组的主要操作还有存取、修改、检索和排序等。

()4、稀疏矩阵中0元素的分布有规律,因此可以采用三元组方法进行压缩存储。

()/*稀疏矩阵中0元素的分布无规律*/5. 如果采用如下方式定义一维字符数组:const int maxSize = 30;/*常变量在程序运行中不能进行修改*/char a[maxSize];则这种数组在程序执行过程中不能扩充。

6. 如果采用如下方法定义一维字符数组:int maxSize = 30;char * a = new char[maxSize];则这种数组在程序执行过程中不能扩充。

7. 数组是一种静态的存储空间分配,就是说,在程序设计时必须预先定义数组的数据类型和存储空间大小,由编译程序在编译时进行分配。

/*对于数组一旦规定了它的维数和各维长度,便可为它分配存储空间*/8. 多维数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。

9. 使用三元组表示稀疏矩阵中的非零元素能节省存储空间。

10. 用字符数组存储长度为n的字符串,数组长度至少为n+1。

1-5ΧΧΧΧ∨6-10ΧΧ∨∨∨11、一个广义表的深度是指该广义表展开后所含括号的层数。

()12. 一个广义表的表头总是一个广义表。

( )13. 一个广义表的表尾总是一个表。

( )14. 一个广义表 ( (a), ( (b), c), ( ( (d) ) ) ) 的长度为3,深度为4。

( )15. 一个广义表 ( (a), ( (b), c), ( ( (d) ) ) ) 的表尾是( ( (b), c), ( ( (d) ) ))。

数据结构第二次作业答案

数据结构第二次作业答案

数据结构第二次作业答案一、单项选择题1。

C 2. B 3。

A 4. A 5。

D 6。

A7。

D 8。

C 9. D 10. C 11. D 12。

C 13. A二、填空题1。

存储 2. 先进先出 3。

栈顶指针 4。

队尾5。

一 6。

局部变量 7。

表尾 8。

重数9. 3 10。

6 11。

6 12. 2h+1—1三、判断题1。

错 2. 对 3。

对 4. 对 5。

错 6。

对 7. 对 8. 错 9. 错四、运算题1.叶子结点数: 5单分支结点数:3两分支结点数:2三分支结点数:12.元素 34 56 58 63 94比较次数 2 1 3 4 43。

左子树为空的所有单支结点:15,23,42,44右子树为空的所有单支结点:304.插入时造成不平衡的结点个数:45。

结点 a b c d e出度 1 1 2 1 2入度 2 2 1 1 16。

(1) 1,3,4,6,5,2 (3分)(2) 1,3,2,4,5,6 (3分)五、算法分析题1.利用"栈”作为辅助存储,将队列中的元素逆置(即相反次序放置)。

2.(1) q = q-〉lLink(2) return 1(3) return 03。

1→21→32→34.(1) return PT(2) (PT=ParentPtr(BT-〉right,BT,X))(3) return NULL 或return 0六、算法设计题1.float poly(float x, float A[], int n) { if(!n) return A[0];else return x*poly(x, A, n-1)+A[n];}2。

int BTreeHeight(BinTreeNode* BT){if(BT==NULL)//对于空树,返回-1并结束递归return –1;else{//计算左子树的高度int h1=BTreeHeight(BT—>left); //计算右子树的高度int h2=BTreeHeight(BT-〉right); //返回树的高度if(h1〉h2) return h1+1;else return h2+1;}}3.int BTreeLeafCount(BinTreeNode* BT){if(BT==NULL) return 0;else if(BT->left==NULL && BT—>right==NULL) return 1;else return BTreeLeafCount(BT—>left)+BTreeLeafCount(BT->right);}数据结构第三次作业答案一、单项选择题1。

数据结构第2单元课后练习答案

数据结构第2单元课后练习答案

某线性表中最常用的操作是在最后一个 元素之后插入一个元素和删除第一个元 素,则采用 存储方式最节省运算时间。
A. 单链表 B. 仅有头指针的单循环链表 C. 双向链表 D. 仅有尾指针的单循环链表
链表结构不具有下列
特点。
A. 插入和和删除元素无需移动元素 B. 可随机访问链表中的任意元素 C. 无需事先分配存储空间 D. 所需空间与结点个数成正比
O(n)
在类SingleList中增加一个成员函数,将单链 表逆置运算,直接实现该函数并分析其时间 复杂度。
template <class T> void SingleList<T>::invert() { Node<T> *p=first,*q; first=NULL; while (p) { q=p->link; p->link=first; first=p; p=q; } }
在类LinearList 中增加一个成员函数,将顺序 表逆置,实现该函数并分析算法的时间复杂 度。不利用类SeqList 提供的操作直接实现。
template <class T> void SeqList<T>::Invert(){ T e; for (int i=0;i<length/2;i++){ e=elements[i]; elements[i]=elements[length-i-1]; elements[length-i-1]=e; } }
利用线性表类LinearList提供的操作,设计实 现两个集合的交和差运算。
#include <iostream.h> #include "seqlist0.h" #include "conio.h" template <class T> //集合交操作 void InterSection(SeqList<T> &LA,SeqList<T> &LB) { int m=LB.Length(); SeqList<T> LC(10); T x; for (int i=1;i<=m;i++) { LB.Find(i,x);//返回第i个元素到X中 if (LA.Search(x)) LC.Insert(LC.Length()+1,x); } cout<<LC; }

计算机二级(JAVA)数据结构与算法章节练习试卷2(题后含答案及解析)

计算机二级(JAVA)数据结构与算法章节练习试卷2(题后含答案及解析)

计算机二级(JA V A)数据结构与算法章节练习试卷2(题后含答案及解析)全部题型 2. 填空题填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。

注意:以命令关键字填空的必须拼写完整。

1.数据元素之间______的整体称为逻辑结构。

正确答案:逻辑关系涉及知识点:数据结构与算法2.一个算法的时间复杂性是______的函数。

正确答案:算法输入规模涉及知识点:数据结构与算法3.在单链表中,NULL称为______,它不指向任何结点,只起______作用。

正确答案:空指针;标志涉及知识点:数据结构与算法4.对长度为n顺序表的删除算法,它最坏情况的时间复杂性及其量级分别是______和______,平均时间复杂性及其量级分别为______和______。

正确答案:n-1;O(n);(n-1)/2:O(n) 涉及知识点:数据结构与算法5.存储结点中数据域占用的存储量与整个结点占用的存储量之比称为______。

正确答案:存储密度涉及知识点:数据结构与算法6.一般地,二叉树可以有______种基本形态。

正确答案:5 涉及知识点:数据结构与算法7.按照排序过程涉及的存储设备的不同,排序可分为______和______。

正确答案:内部排序;外部排序涉及知识点:数据结构与算法8.评价排序算法优劣的主要标准是______和______。

正确答案:时间复杂性;算法需要的附加空间涉及知识点:数据结构与算法9.稳定的排序算法有______、______和______。

正确答案:直接插入排序:冒泡排序;归并排序涉及知识点:数据结构与算法10.第一趟排序后序列中关键字最大的记录交换到最后的排序方法是______。

正确答案:冒泡排序涉及知识点:数据结构与算法11.数据结构分为逻辑结构与存储结构,线性链表属于______。

正确答案:存储结构涉及知识点:数据结构与算法12.在树形结构中,树根结点没有______。

正确答案:前件涉及知识点:数据结构与算法13.数据的逻辑结构有线性结构和______两大类。

数据结构第二次课程测试试卷

数据结构第二次课程测试试卷

数据结构课程第二次测试试卷
(开卷:时间60分钟)
1.已知一棵二叉树如下,请分别写出按前序、中序、后序和层次遍历时得到的结点序列。

(20分)
2.请证明非空满二叉树的叶结点数等于其分支结点数加1。

(20分)
3.编写求二叉树的度为2的结点数目的算法。

(20分)
4.编写判定二叉树是二叉查找树(BST)的算法。

(20分)
5.编写判定二叉树是最大值堆的算法。

(20分)
【注意,第3,4,5题的算法必须写出算法思想和伪代码,否则至少扣一半分数。


数据结构课程第二次测试试卷
(开卷:时间60分钟)
1、已知一棵二叉树如下,请分别写出按前序、中序、后序和层次遍历时得到的结点序列。

(20分)
2、请证明非空满二叉树的叶结点数等于其分支结点数加1。

(20分)
3、编写求二叉树的度为2的结点数目的算法。

(20分)
4、编写判定二叉树是二叉查找树(BST)的算法。

(20分)
5、编写判定二叉树是最大值堆的算法。

(20分)
【注意,第3,4,5题的算法必须写出算法思想和伪代码,否则至少扣一半分数。

】。

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

0980 输出利用先序遍历创建的二叉树的层次遍历序列(中)#include <iostream>#include <malloc.h>using namespace std;typedef struct node{char data;node *leftchild;node *rightchild;}Node;void Init(Node *&L){L = (Node *)malloc(sizeof(Node));}void PreCreate(Node *&L){char ch;cin>>ch;if(ch != '#'){Init(L);L->data = ch;L->leftchild = NULL;L->rightchild = NULL;PreCreate(L->leftchild);PreCreate(L->rightchild);}else{L = NULL;}}void levelT(Node *L){Node *p;Node *q[100];int fornt, rear;fornt = -1;rear = -1;if(L != NULL){rear = (rear+1)%100;q[rear] = L;while(fornt != rear){fornt = (fornt+1)%100;p = q[fornt];cout<<p->data;if(p->leftchild != NULL){rear = (rear+1)%100;q[rear] = p->leftchild;}if(p->rightchild != NULL){rear = (rear+1)%100;q[rear] = p->rightchild;}}}}int main(){Node *p;PreCreate(p);levelT(p);return 0;}0981统计利用二叉树存储的森林中树的棵树(易)#include <iostream>#include <malloc.h>using namespace std;typedef struct node{char data;node *leftchild;node *rightchild;}Node;void InitTree(Node *&L){L = (Node *)malloc(sizeof(Node));}void preCreate(Node *&L){InitTree(L);char ch;cin>>ch;if(ch != '#'){L->data = ch;L->leftchild = NULL;L->rightchild = NULL;preCreate(L->leftchild);preCreate(L->rightchild);}elseL = NULL;}int Ftree(Node *&L){if(L == NULL){return 0;}else if(L->rightchild == NULL){return 1;}else{return Ftree(L->rightchild)+1;}}int main(){Node *p;preCreate(p);cout<<Ftree(p);return 0;}0982 输出利用二叉树存储的普通树的度(中)#include <iostream>#include <malloc.h>using namespace std;typedef struct node{char data;node *leftchild;node *rightchild;}Node;void Init(Node *&L){L = (Node *)malloc(sizeof(Node));}void preCreate(Node *&L){char ch;cin>>ch;if(ch != '#'){Init(L);L->data = ch;L->leftchild = NULL;L->rightchild = NULL;preCreate(L->leftchild);preCreate(L->rightchild);}else{L = NULL;}}int findG(Node *&L){int max = 0, a, b;if(L == NULL){return max;}else{a = (findG(L->rightchild)+1);b = findG(L->leftchild);(a >= b)? max = a : max = b;}return max;}int main(){Node *p;preCreate(p);if(p->rightchild != NULL){cout<<"ERROR";}else{cout<<findG(p);}return 0;}0983利用二叉树中序及后序遍历确定该二叉树的先序序列(难)#include <iostream>#include <malloc.h>#include <string.h>using namespace std;typedef struct node{char data;node *leftchild;node *rightchild;}Node;void InitTree(Node *&L){L = (Node *)malloc(sizeof(Node));L->leftchild = NULL;L->rightchild = NULL;}void preCreate(Node *&L, char *pos, char *in, int n) {char *p;int k;if(n <= 0){InitTree(L);L = NULL;return;}InitTree(L);L->data = *(pos+n-1);for(p = in; p < in +n; p++){if(*p == *(pos+n-1))break;}k = p -in;preCreate(L->leftchild, pos, in, k);preCreate(L->rightchild, pos+k, p+1, n-k-1);}void post(Node *&L){if(L != NULL){cout<<L->data;post(L->leftchild);post(L->rightchild);}}int main(){Node *p;int n;char pos[100], in[100];scanf("%s",in);scanf("%s",pos);n = strlen(in);preCreate(p, pos, in, n);post(p);return 0;}0984利用二叉树中序及先序遍历确定该二叉树的后序序列(难)#include <iostream>#include <malloc.h>#include <string.h>using namespace std;typedef struct node{char data;node *leftchild;node *rightchild;}Node;void InitTree(Node *&L){L = (Node *)malloc(sizeof(Node));L->leftchild = NULL;L->rightchild = NULL;}void preCreate(Node *&L, char *pre, char *in, int n){char *p;int k;if(n <= 0){InitTree(L);L = NULL;return;}InitTree(L);L->data = *pre;for(p = in; p < in +n; p++){if(*p == *pre)break;}k = p -in;preCreate(L->leftchild, pre+1, in, k);preCreate(L->rightchild, pre+k+1, p+1, n-k-1);}void post(Node *&L){if(L != NULL){post(L->leftchild);post(L->rightchild);cout<<L->data;}}int main(){Node *p;int n;char pre[100], in[100];scanf("%s",in);scanf("%s",pre);n = strlen(in);preCreate(p, pre, in, n);post(p);return 0;}0986 哈夫曼译码0987输出用先序遍历创建的二叉树是否为完全二叉树的判定结果(难)1053输出利用先序遍历创建的二叉树中的指定结点的度(易)1052 输出利用先序遍历创建的二叉树中的指定结点的双亲结点(中)#include<stdlib.h>#include<malloc.h>#include<iostream>using namespace std;typedef struct Node{char data;Node*lc,*rc;}node;char x;void precreat(node*&root){char c;cin>>c;if(c=='#'){root=NULL;}else{root=(node*)malloc(sizeof(node));root->data=c;root->lc=NULL;root->rc=NULL;precreat(root->lc);precreat(root->rc);}}void PreOrder(node*root){if(root!=NULL){if(root->lc!=NULL&&root->lc->data==x){cout<<root->data;exit(0);}if(root->rc!=NULL&&root->rc->data==x){cout<<root->data;exit(0);}PreOrder(root->lc);PreOrder(root->rc);}else{cout<<"#";exit(0);}}int main(){node*root;precreat(root);cin>>x;PreOrder(root);return 0;}1051 输出利用先序遍历创建的二叉树中的指定结点的孩子结点(易)#include<iostream>#include<malloc.h>using namespace std;typedef struct node{char data;node *left,*right;}treenode;void pre(treenode *&root){char c;cin>>c;if(c=='#') root=NULL;else{root=(treenode *)malloc(sizeof(treenode));root->data=c;root->left=NULL;root->right=NULL;pre(root->left);pre(root->right);}}void inorder(treenode *&root,char c){if(root==NULL)return;else{if(root->data==c){if(root->left==NULL)cout<<"L:#,";elsecout<<"L:"<<root->left->data<<",";if(root->right==NULL)cout<<"R:#";elsecout<<"R:"<<root->right->data;return;}inorder(root->left,c);inorder(root->right,c);}}int main(){char c;treenode *root;pre(root);cin>>c;inorder(root,c);return 0;}1105交叉二叉树的孩子结点(易)1055邻接矩阵到邻接表(易)1056邻接表到邻接矩阵(易)1057有向图的出度计算(易)1058无向图的出度计算(易)1059有向图的最大出度计算(易1060无向图的最大出度计算(易)1061有向图的k出度计算(中)1062有向图的边存在判断(易)#include <iostream>#include <stdio.h>using namespace std;int main(){int a[50][50], i, j, n, row, col;cin>>n;cin>>row;cin>>col;for(i = 0; i < n; i++){for(j = 0; j < n; j++){cin>>a[i][j];}}if(a[row][col]==1)cout<<"yes";elsecout<<"no";return 0;}1063带权有向图计算(易) 1064带权无向图存储判定(中) #include <iostream>#include <stdio.h>using namespace std;void Jug(int a[][50], int n){int i, j;for(i = 0; i < n; i++){if(a[i][i] != 0){cout<<"no";return;}for(j = 0; j < n; j++){if(a[i][j] != a[j][i]){cout<<"no";return;}}}cout<<"yes";}int main(){int a[50][50], i, j, n;cin>>n;for(i = 0; i < n; i++){for(j = 0; j < n; j++){cin>>a[i][j];}}Jug(a,n);return 0;}1065无向图的连通分量计算(中)1067 有向图的邻接表存储强连通判断(中)#include <iostream>#include <string.h>using namespace std;int str[1000][1000],n;int main (void){int i,a,b,n,m;cin>>m>>n;for (i=0;i<n;i++){cin>>a>>b;str[a][b]=1;}int mark=1;for (i=0;i<m-1;i++){if (str[i][i+1]!=1)mark=0;}if (mark)cout<<"yes";elsecout<<"no";return 0;}1068图的按录入顺序深度优先搜索(难)#include<iostream>using namespace std;int visited[100]={0};typedef struct{int n;char data[500];int edge[500][500];}Mgraph;void create(Mgraph &G,int n){int i,j;for(i=0;i<n;i++)cin>>G.data[i];for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>G.edge[i][j];G.n=n;}void dfs(Mgraph &g,char c){cout<<c;int i,j;for(i=0;i<g.n;i++)if(g.data[i]==c){j=i;visited[j]=1;break;}for(i=0;i<(g.n);i++){if(visited[i]==0&&g.edge[j][i]!=0)dfs(g,g.data[i]);}}int main(){int n;char e;Mgraph my;cin>>n;create(my,n);cin>>e;dfs(my,e);return 0;}1069图的按录入顺序广度优先搜索(难)#include<stdio.h>#include<iostream>#include<stdlib.h>using namespace std;typedef struct{char vexs[20];int edges[20][20];int n,e;}MGraph;int CreatMGraph(MGraph *G){int i,j;char a,b[50];int k;cin>>G->n;cin>>b;for(i=0;i<G->n;i++){G->vexs[i]=b[i];}for(i=0;i<G->n;i++){for(j=0;j<G->n;j++){cin>>G->edges[i][j];}}cin>>a;for(i=0;i<G->n;i++){if(G->vexs[i]==a){k=i;}}return k;}void BFS(MGraph *G,int k){int i,j,f=-1,r=-1;int visited[20];int queue[20];for(i=0;i<G->n;i++)visited[i]=0;cout<<G->vexs[k];visited[k]=1;r=(r+1)%20;queue[r]=k;while(f!=r){f=(f+1)%20;i=queue[f];for(j=0;j<G->n;j++)if(G->edges[i][j]!=0 && visited[j]==0){cout<<G->vexs[j];visited[j]=1;r=(r+1)%20;queue[r]=j;}}}int main(){int q;MGraph * G;G=(MGraph *)malloc(sizeof(MGraph));q=CreatMGraph(G);BFS(G,q);return 0;}1070邻接矩阵存储简单路径(难)#include <iostream>#include <stdio.h>using namespace std;int path[100], visited[100] = {0}, top = -1;void DFS(int a[][100], int v1, int v2, int n) {visited[v1] = 1;path[++top] = v1;int i , j;for(j = 0; j < n; j++){if(a[v1][j] != 0 && visited[j] == 0) {if(j == v2){for(i = 0; i <= top; i++)cout<<path[i];cout<<j;cout<<endl;}elseDFS(a,j,v2,n);}}top--;visited[v1] = 0;}int main(){int i, j, n, v1, v2, a[100][100];cin>>n;cin>>v1>>v2;for(i = 0; i < n; i++){for(j = 0; j < n; j++){cin>>a[i][j];}}DFS(a,v1,v2,n);return 0;}1071有向图的邻接矩阵存储顶点删除(难)#include <iostream>#include <malloc.h>#include <stdio.h>using namespace std;int visited[100];typedef struct{int no;int n;int edges[100][100];}MGraph;void Delet(MGraph *&G){G = (MGraph *)malloc(sizeof(MGraph)); int e, i, j;cin>>G->n;cin>>e;for(i = 0; i < G->n; i++){G->no = i;for(j = 0; j < G->n; j++){cin>>G->edges[i][j];}}cout<<G->n-1;cout<<endl;for(i = 0; i < G->n; i++){if(i != e)cout<<i;}cout<<endl;for(i = 0; i < G->n; i++){if(i == e)continue;for(j = 0; j < G->n; j++){if(j == e)continue;cout<<G->edges[i][j];}cout<<endl;}}int main(){MGraph *G;Delet(G);return 0;}1072 有向图的邻接矩阵存储根计算(难)#include <iostream>#include <queue>#define MAXSIZE 100using namespace std;bool bfs(const bool (*arr)[MAXSIZE],const int &n,const int &beg=0); int main(){bool arr[MAXSIZE][MAXSIZE]={0};int n;cin >> n;for(int i=0;i!=n;++i)for(int j=0;j!=n;++j)cin >> arr[i][j];for(int i=0;i!=n;++i)if(bfs(arr,n,i))cout << i;return 0;}bool bfs(const bool (*arr)[MAXSIZE],const int &n,const int &beg) {bool visited[MAXSIZE]={false};int cur,ct(0);queue<int> q;q.push(beg);visited[beg]=true;while(!q.empty()){++ct;cur=q.front();q.pop();for(int i=0;i!=n;++i)if(!visited[i]&&arr[cur][i]){q.push(i);visited[i]=true;}}return n==ct?true:false;}1075求最小生成树(Prim算法)(难)#include<cstdio>#include<cstdlib>#include<memory.h>#include<limits.h>#include<iostream>#define INF 30000using namespace std;int n,m,map[100][100];char a[100];int get(char e){for(int i=0;i<n;i++)if(a[i]==e)return i;}void read(){int i,w;char x,y;memset(map,INF,sizeof(map));cin>>n>>m;for(i=0;i<n;i++)cin>>a[i];for(i=0;i<m;i++){cin>>x>>y>>w;map[get(x)][get(y)]=w;map[get(y)][get(x)]=w;}}void prim(){int lowcost[100],adjvex[100],i,j,k; for(i=0;i<n;i++){lowcost[i]=map[0][i];adjvex[i]=0;}for(i=1;i<n;i++){int min=INF;for(j=1;j<n;j++){if(lowcost[j] && lowcost[j]<min){min=lowcost[j];k=j;}}cout<<"("<<a[adjvex[k]]<<","<<a[k]<<")"; lowcost[k]=0;for(j=0;j<n;j++){if(map[k][j] && map[k][j]<lowcost[j]) {lowcost[j]=map[k][j];adjvex[j]=k;}}}}void print(){for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<map[i][j]<<' ';cout<<endl;}}int main(){read();//print();prim();//cout<<endl;return 0;}1076判断给定有向图是否存在回路(难)1010折半查找的实现(易)1012哈希表(链地址处理冲突)(中)1013哈希表(开放定址法处理冲突)(中)#include<iostream>using namespace std;typedef struct Data{int num;int n;}data;int n;data hash[100];void build(){int m;int i;cin>>n;for(i=0;i<n;i++)hash[i].n=0;cin>>m;for(i=0;i<m;i++){int e,t,e_;int mid=1;cin>>e;t=e%n;e_=e;while(hash[t].n!=0){mid++;t=(e_+1)%n;e_++;}hash[t].num=e;hash[t].n=mid;}}int deal(){int e;cin>>e;int e_;e_=e;while (e_%n!=e%n-1){if(hash[e_%n].num==e){cout<<e_%n<<","<<hash[e_%n].n;return 0;}elsee_++;}return -1;}int main(void){build();if(deal()==-1)cout<<-1;return 0;}1014交换排序算法的设计与实现(中) 1015堆排序算法(难)1016插入排序算法实现(易)1098堆的判断(易)1099希尔排序算法实现(中)1077平衡二叉树的判定(中)#include <iostream>#include <string.h>#include <malloc.h>using namespace std;typedef struct node{char data;node *leftchild;node *rightchild;}Node;void Init(Node *N){N = (Node *)malloc(sizeof(Node));}void CreateT(Node *&N){char ch;cin>>ch;if(ch == '#'){N = (Node *)malloc(sizeof(Node));N = NULL;return;}N = (Node *)malloc(sizeof(Node));N->data = ch;CreateT(N->leftchild);CreateT(N->rightchild);}char pre[100], in[100];int i=0, j=0;void preOrder(Node *&N){if(N == NULL)return;pre[i++] = N->data;preOrder(N->leftchild);preOrder(N->rightchild);}void inOrder(Node *&N){if(N == NULL)return;inOrder(N->leftchild);in[j++] = N->data;inOrder(N->rightchild);}int juge(char *pre, char *in, int n) {char *p;int k;if(n <= 1)return 1;for(p = in; p <= in+n; p++){if(*p == *pre)break;}k = p - in;if(n-2*k<=2 && n-2*k>=0){juge(pre,in,k);juge(pre+k,p,n-k-1);return 1;}elsereturn 0;}int main(){Node *N;CreateT(N);preOrder(N);inOrder(N);int n, flag;n = strlen(in);flag = juge(pre, in, n);if(flag == 0){cout<<"no!";return 0;}else{cout<<"yes!";return 0;}}1011二叉排序树的实现和查找(中)#include<stdio.h>#include<malloc.h>typedef struct node{int key;struct node *lchild,*rchild;}BSTNode;int insertBST(BSTNode *&p,int k){if(p==NULL){p=(BSTNode*)malloc(sizeof(BSTNode));p->key=k;p->lchild=p->rchild=NULL;return 1;}else if(k==p->key)return 0;else if(k<p->key)return insertBST(p->lchild,k);elsereturn insertBST(p->rchild,k);}BSTNode *CreatBST(int A[],int n){BSTNode *bt=NULL;int i=0;while (i<n){insertBST(bt,A[i]);i++;}return bt;}int sum=0;BSTNode *SearchBST(BSTNode *bt,int k){ sum++;if(bt==NULL){sum=-1;return bt;}if (bt->key==k)return bt;if (k<bt->key){return SearchBST(bt->lchild,k);}else{return SearchBST(bt->rchild,k);}}int main(){BSTNode *bt;int A[100],n,i,m,j;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&A[i]);}scanf("%d",&m);bt=CreatBST(A,n);SearchBST(bt,m);printf("%d",sum);return 0;}。

相关文档
最新文档