数据结构导论作业一

合集下载

数据结构作业

数据结构作业
第六章树和二叉树
6.45 编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。
6.46 编写复制一棵二叉树的非递归算法。
6.59 编写算法完成下列操作:无重复地输出以孩子兄弟链表存储的树T中所有的边(这里的边是指树T本身的分支,而不是孩子兄弟链表所形成的二叉树的分支)。输出的形式为(k1, k2), ..., (ki, kj), ..., 其中,ki和kj为树结点中的结点标识。
1.20试编写算法求一元多项式 的值Pn(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度。注意选择你认为较好的输入和输出方法。本题的输入为ai(i=0, 1,…, n)、x0和n,输出为Pn(x0)。
第二章线性表
2.11设顺序表va中的数据元素非递减有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
注:根据同学们的要求,将作业量从六道题减少到三道题,希望同学们能及时完成。
第五章数组和广义表
5.21 假设稀疏矩阵A和B均以三元组顺序表作为存储结构。试写出矩阵相加的算法,另设三元组C存放结果矩阵。
5.26 试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法。
5.33 试编写递归算法,输出广义表中所有原子项及其所在的层次。
第十二章 文件
12.10假设某个有3000张床位的旅店需建立一个便于管理的文件,每个记录是一个旅客的身份和投宿情况。其中旅客身份证号(15位十进制数字)可作为主关键字,此外还需建立按姓名、投宿日期、从哪来等次关键字项索引。请为此文件确定一种组织方式(如:主文件如何组织,各次关键字项索引如何建立等
第十章 排序
10.23 试以L.r[k+1]作为监视哨改写直接插入排序算法。其中,L.r[1...k]为待排记录且k<MAXSIZE。

数据结构导论练习题

数据结构导论练习题

一、选择题1.在一个单链表HL中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行。

A.q一)next=p一)next;p一)next=q;B.p一)next=q一)next;q=p;C.q一)next=p一)next;p一)next=q;D.p一)next=q一)next; q一)next=p;2. 在一个顺序队列中,队首指针指向队首元素的位置:A.前一个 B.后一个 C.当前3. 下列数据组织形式中,()的结点按逻辑关系依次排列形成一个“锁链”。

A.集合B.树形结构C.线性结构D.图状结构4. 数据结构可以形式化地定义为(S,△),其中S指某种逻辑结构,△是指()A.S上的算法B.S的存储结构C.在S上的一个基本运算集D.在S上的所有数据元素5. 下列说法正确的是()A.线性表的逻辑顺序与存储顺序总是一致的B.线性表的链式存储结构中,要求内存中可用的存储单元可以是连续的,也可以不连续C.线性表的线性存储结构优于链式存储结构D.每种数据结构都具有插入、删除和查找三种基本运算6. 设非空单链表的数据域为data,指针域为next,指针p指向单链表中第i个结点,s指向已生成的新结点,现将s结点插入到单链表中,使其成为第i个结点,下列算法段能正确完成上述要求的是()A.s->next=p->next;p->next=s;B.p->next=s;s->next=p->next;C.s->next=p->next;p->next=s;交换p->data和s->data;D.p=s;s->next=p;7. 将一棵有50个结点的完全二叉树按层编号,则对编号为25的结点x,该结点()A.无左、右孩子B.有左孩子,无右孩子C.有右孩子,无左孩子D.有左、右孩子8. 采用线性探测法解决冲突问题,所产生的一系列后继散列地址()A.必须大于等于原散列地址B.必须小于等于原散列地址C.可以大于或小于但不能等于原散列地址D.地址大小没有具体限制9. 用快速排序方法对包含有n个关键字的序列进行排序,最坏情况下执行的时间复杂度为()A.O(n)B.O(log2n)C.O(nlog2n)D.O(n2)10. 下列数据结构中,( )不都是线性结构。

数据结构(本)形考作业1参考答案

数据结构(本)形考作业1参考答案

数据结构(本)形考作业指导作业1参考答案一、单项选择题1.C 2.D 3.B 4.C 5.D 6.C 7.B 8.C 9.A 10.B11.C 12.D 13.C 14.A 15.B 16.C 17.C 18.B 19.B 20.D二、填空题1.n-i+1 2.n-i3.集合线性结构树形结构图状结构4.物理结构存储结构5.线性结构非线性结构6.有穷性确定性可形性有零个或多个输入有一个或多个输出7.图状结构8.树形结构9.线性结构10.n-1 O(n) 11.s->next=p->next; 12.head13.q->next=p->next; 14.p->next=head; 15.单链表16.顺序存储链式存储17.存储结构18.两个直接后继直接前驱尾结点头结点19.头结点的指针指向第一个结点的指针20.链式链表三、问答题1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现?答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。

数据在计算机中的存储表示称为数据的存储结构。

可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。

尽管因采用的存储结构不同,逻辑上相邻的结点,其物理地址未必相同,但可通过结点的内部信息,找到其相邻的结点,从而保留了逻辑结构的特点。

采用的存储结构不同,对数据的操作在灵活性,算法复杂度等方面差别较大。

2.解释顺序存储结构和链式存储结构的特点,并比较顺序存储结构和链式存储结构的优缺点。

答:顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,,要求内存中存储单元的地址必须是连续的。

优点:一般情况下,存储密度大,存储空间利用率高。

缺点:(1)在做插入和删除操作时,需移动大量元素;(2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;(3)表的容量难以扩充。

数据结构导论DOC

数据结构导论DOC

《数据结构导论》课程考核形式:闭卷考试需用时间:100分钟层次:专科班级:计应专朗沃姓名:学号:1.在数据结构中,与所使用的计算机无关的是()。

A.存储结构B.物理结构C.物理和存储结构D.逻辑结构2.线性表采用链式存储结构时,其地址是()。

A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以3.在下列链表中不能从当前结点出发访问到其余各结点的是()。

A.单链表B.单循环链表C.双向链表D.双向循环链表4.设一个栈的进栈序列是 a,b,c,d,进栈的过程中可以出栈,不可能的出栈序列是()A.d,c,b,aB.c,d,b,aC.d,c,a,bD.a,b,c,d 5.设循环队列中数组的下标是0~N-1,其头尾指针分别为f 和r ,则其元素个数为()A. r-fB.r-f-1C.(r-f)%N+1D.(r-f+N)%N6.广义表((a),a)的表头和表尾分别是:A. a, ((a))B. (a), (a)C. b, (a)D. ((a)), a 7.对稀疏矩阵采用压缩存储,其缺点之一是()。

A.无法判断矩阵有多少行和多少列B.无法根据行列号查找某个矩阵元素C.无法根据行列号计算矩阵元素的存储地址D.使矩阵元素之间的逻辑关系更加复杂8.以下说法错误的是()。

A.一般在哈夫曼树中,权值越大的叶子离根结点越近B.哈夫曼树中没有度数为 1 的分支结点C.若初始森林中共有 n 棵二叉树,最终求得的哈夫曼树中共有 2n-1个结点D.若初始森林中共有 n 棵二叉树,进行 2n-1 次合并后才能剩下最终的哈夫曼树9.任何一个无向连通图()最小生成树。

A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在10.树最适合用来表示():A. 有序数据元素B. 无序数据元素C. 元素之间具有分支层次关系的数据D. 元素之间无联系的数据二、填空题(本大题共9小题,每空2 分,共20分)1.在双向链表中,每个结点包含两个指针域,一个指向__ __结点,另一个指向_ ___结点。

数据结构导论试题答案

数据结构导论试题答案

数据结构导论试题12.1-02.10(答案03.10、04.10、05.10、09.10、10.10、11.1、11.10)浙江省2001年10月自学考试数据结构导论试题课程代码:02142一、单项选择题(在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。

每小题1分,共14分)1.算法分析的目的是( )A.找出数据结构的合理性B.研究算法中的输入/输出关系C.分析算法的效率以求改进D.分析算法的易读性2.在需要经常查找结点的前驱与后继的场合中,使用( )比较合适。

A.单链表B.双链表C.顺序表D.循环链表3.下面关于线性表的叙述中,错误的为( )A.顺序表使用一维数组实现的线性表B.顺序表必须占用一片连续的存储单元C.顺序表的空间利用率高于链表D.在链表中,每个结点只有一个链域4.带头结点的单链表head为空的判断条件是( )A. head=NILB. head↑.next=NILC. head↑.next=headD. head<>NIL5.队列通常采用两种存储结构是( )A.顺序存储结构和链表存储结构B.散列方式和索引方式C.链表存储结构和数组D.线性存储结构和非线性存储结构6.按照二叉树的定义,具有3个结点的二叉树有( )A.3B.4C.5D.67.二叉树的结构如下图所示,其中序遍历的序列为( )A.a,b,d,g,c,e,f,hB.d,g,b,a,e,c,h,fC.g,d,b,e,h,f,c,aD.a,b,c,d,e,f,g,h8.深度为5的二叉树至多有( )个结点。

A.16B.32C.31D.109.对于一个具有n个顶点的无向图,若采用邻接表表示,则存放表头结点的数组的大小为( )A.nB.n+1C.n-1D.n+边数10.在一个具有n个顶点的无向图中,要连通全部顶点至少需要( )条边。

A.nB.n+1C.n-1D.n/211.静态查找表与动态查找表二者的根本差别在于( )A.它们的逻辑结构不一样B.施加在其上的操作不同C.所包含的数据元素的类型不一样D.存储实现不一样12.散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址。

全国自学考试数据结构导论试题及答案4套

全国自学考试数据结构导论试题及答案4套

全国自学考试数据结构导论试题及答案4套第一套试题一、选择题(每题4分,共40分)1. 下列哪个数据结构是一种非线性结构?A. 数组B. 栈C. 队列D. 树2. 下列哪种算法不适用于解决排序问题?A. 冒泡排序B. 快速排序C. 深度优先搜索D. 归并排序3. 在数据结构中,堆的底层实现通常采用哪种数据结构?A. 数组B. 栈C. 链表D. 队列4. 下列哪个选项是描述图结构的准确说法?A. 图结构是一种线性结构B. 图结构由节点和指向节点的边构成C. 图结构不能存储数据D. 图结构不支持插入和删除操作5. 下列哪个排序算法具有最坏时间复杂度为O(nlogn)?A. 冒泡排序B. 插入排序C. 选择排序D. 希尔排序二、填空题(每题4分,共40分)1. 在二叉树中,每个节点最多有____个子节点。

2. 图的两个顶点之间的路径长度是指连接这两个顶点所需的____数。

3. 链表是一种____结构。

4. 快速排序算法的核心思想是____。

5. 栈和队列都属于线性结构,其主要区别在于____操作的限制。

三、简答题(每题10分,共30分)1. 请简要描述栈的特点以及栈的应用场景。

2. 请简要介绍图的基本概念,并说明图的应用领域。

3. 请解释递归算法的原理,并给出一个使用递归算法解决问题的例子。

四、编程题(共30分)请使用任意编程语言实现一个简单的栈数据结构,并编写测试代码进行验证。

第二套试题一、选择题(每题4分,共40分)1. 在二叉搜索树中,中序遍历的结果是____。

A. 升序排列B. 降序排列C. 随机排序D. 不确定的排序2. 在哈希表结构中,解决冲突问题的常用方法是____。

A. 线性探测B. 链地址法C. 开放地址法D. 扩容法3. AVL树是一种____。

A. 二叉搜索树B. 哈希表C. B树D. 红黑树4. 以下哪个算法不是用于解决查找问题?A. 二分查找B. 深度优先搜索C. 广度优先搜索D. 哈希查找5. 以下哪个数据结构不支持随机访问元素?A. 数组B. 栈C. 链表D. 哈希表二、填空题(每题4分,共40分)1. 在二叉树中,每个节点最多有____个子节点。

数据结构导论作业一

数据结构导论作业一

1、章节作业第一章概论1.设计算法在整型数组A[n]中查找值为K的元素,若找到,则输出其位置i(0≤i≤n-1),否则输出-1作为标志,并分析算法的时间复杂度。

int search (int A[],int n,int k){ int i;i=0;while (i<=n-1)if (A[i]!=k) i++;else break;if (i<=n-1) return I;else return -1;}当查找成功时,A[i]与k比较次数≤n;当查找不成功时,A[i]与k比较n次,所以,算法时间复杂度T(n)=O(n)。

2.写出计算方阵A[n][n]与B[n][n]乘积C[n][n]的算法,分析算法的时间复杂度。

void matrixmultiply (int A[][n],int B[][n],int C[][n],int n){ int I,j;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][j]*B[k][j];}}以方阵阶数n作为输出规模。

可知第二层循环中的第一条赋值语句共执行n2次,第三层循环体中的乘法和赋值语句共执行n3次,所以此算法的计算量为n3+n2,算法时间复杂T(n)=O(n3)第二章线性表1.设带头结点的单链表的结点结构如下:struct node { DataType data;struct node *next;} Node, *LinkList;试编写一个函数int count(LinkList head,DataType x)统计单链表中数据域为x的结点个数。

int count(LinkList head,DataType x){LinkList p=head->next;Int m=0;while (p!=NULL){ if(p->data==x) m++;p=p->next;}return m;}2.试分别以顺序表和带头结点的单链表作存储结构,各写一个实现线性表的就地(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。

全国自考《数据结构导论》真题及答案解析

全国自考《数据结构导论》真题及答案解析

全国自考《数据结构导论》真题及答案解析-卷面总分:86分答题时间:60分钟试卷题量:43题一、单选题(共30题,共60分)1.在顺序表中查找第i个元素,时间效率最高的算法的时间复杂度为()A.O(1)B.O(√n)C.O(log2n)D.O(n)正确答案:A您的答案:本题解析:暂无解析2.树形结构中,度为0的结点称为()A.树根B.叶子C.路径D.二叉树正确答案:B您的答案:本题解析:暂无解析3.已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},E={},则图G的拓扑序列是()A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V4,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V7正确答案:A您的答案:本题解析:暂无解析4.有关图中路径的定义,表述正确的是()A.路径是顶点和相邻顶点偶对构成的边所形成的序列B.路径是不同顶点所形成的序列C.路径是不同边所形成的序列D.路径是不同顶点和不同边所形成的集合正确答案:A您的答案:本题解析:暂无解析5.串的长度是指()A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数正确答案:B您的答案:本题解析:暂无解析6.组成数据的基本单位是()A.数据项B.数据类型C.数据元素D.数据变量正确答案:C您的答案:本题解析:暂无解析7.程序段的时间复杂度为()A.O(1)=B.O(n)C.O(n2D.O(n3)正确答案:B您的答案:本题解析:暂无解析8.与串的逻辑结构不同的数据结构是()A.线性表B.栈C.队列D.树正确答案:D您的答案:本题解析:暂无解析9.二叉树的第i(i≥1)层上所拥有的结点个数最多为()A.B.2iC.D.正确答案:C您的答案:本题解析:暂无解析10.设单链表中指针p指向结点A,若要删除A的直接后继,则所需修改指针的操作为()A.p-&gt;next=p-&gt;next-&gt;nextB.p=p-&gt;nextC.p=p-&gt;next-&gt;nextD.p-&gt;next=p正确答案:A您的答案:本题解析:暂无解析11.下列排序算法中,某一趟结束后未必能选出一个元素放在其最终位置上的是()A.堆排序B.冒泡排序C.直接插入排序D.快速排序正确答案:C您的答案:本题解析:暂无解析12.设字符串S1=″ABCDEFG″,S2=″PQRST″,则运算S=CONCAT(SUBSTR(S1,2,LENGTH(S2)),SUBSTR(S1,LENGTH(S2),2))后S的结果为()A.″BCQR″B.″BCDEF″C.″BCDEFG″D.″BCDEFEF″正确答案:D您的答案:本题解析:暂无解析13.在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并且A的左孩子的平衡因子为-1,右孩子的平衡因子为0,则使其平衡的调整方法为()A.LL型B.LR型C.RL型D.RR型正确答案:B您的答案:本题解析:暂无解析14.如果结点A有3个兄弟结点,而且B为A的双亲,则B的度为()A.1B.3C.4D.5正确答案:C您的答案:本题解析:15.数据表A中每个元素距其最终位置较近,则最省时间的排序算法是()A.堆排序B.插入排序C.直接选择排序D.快速排序正确答案:B您的答案:本题解析:暂无解析16.在表长为n的顺序表上做插入运算,平均要移动的结点数为()A.n/4B.n/3C.n/2D.n正确答案:C您的答案:本题解析:暂无解析17.顺序表中有19个元素,第一个元素的地址为200,且每个元素占一个字节,则第14个元素的存储地址为()A.212B.213C.214D.215正确答案:B您的答案:本题解析:暂无解析18.由顶点V1,V2,V3构成的图的邻接矩阵为,则该图中顶点V1的出度为(C)A.0B.1C.2D.3正确答案:C您的答案:本题解析:暂无解析19.元素的进栈次序为A,B,C,D,E,则退栈中不可能的序列是()A.A,B,C,D,EB.B,C,D,E,AC.E,A,B,C,DD.E,D,C,B,A正确答案:C本题解析:暂无解析20.由带权为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带权路径长度为()A.23B.37C.44D.46正确答案:C您的答案:本题解析:暂无解析21.在已知尾指针的单循环链表中,插入一个新结点使之成为首结点,其算法的时间复杂度为()A.O(1)B.(log2n)C.O(n)D.O(n2)正确答案:A您的答案:本题解析:暂无解析22.已知一个有序表为(13,18,24,35,47,50,62,83,90,115,134),当二分查找值为90的元素时,查找成功时需比较的次数为()A.1B.2C.3D.4正确答案:B您的答案:本题解析:暂无解析23.在查找顺序表各结点概率相等的情况下,顺序按值查找某个元素的算法时间复杂度为()A.O(1)B.O(n)C.O(√n)D.O(log2n)正确答案:B您的答案:本题解析:暂无解析24.下列各项键值序列中不是堆的为()A.{5,23,16,68,94,72,71,73}B.{5,16,23,68,94,72,71,73}C.{5,23,16,73,94,72,71,68}D.{5,23,16,68,73,71,72,94}正确答案:C您的答案:本题解析:暂无解析25.在线性表的下列存储结构中进行插入、删除运算,花费时间最多的是()A.单链表B.双链表C.顺序表D.单循环链表正确答案:C您的答案:本题解析:暂无解析26.在栈中进行插入和删除操作的一端称为()A.栈顶B.栈底C.任意位置D.指定位置正确答案:A您的答案:本题解析:暂无解析27.用n个值构造一棵二叉排序树,它的最大高度为A..n/2B.nC.√nD.log2n正确答案:B您的答案:本题解析:暂无解析28.冒泡排序的时间复杂度是()A.O(n2)B.O(nlog2n)C.O(n)D.O(log2n)正确答案:A您的答案:本题解析:暂无解析29.设无向图的邻接表如题14图所示,则该图的边数为()A.4B.5C.10D.20正确答案:B您的答案:本题解析:暂无解析30.带表头结点链队列的队头和队尾指针分别为front和rear,则判断队空的条件为()A.front==rearB.front!=NULLC.rear!=NULLD.front==NULL正确答案:A您的答案:本题解析:暂无解析二、填空题(共13题,共26分)31.下列程序段的时间复杂度为________正确答案:O(n)您的答案:32.数据的逻辑结构被分为集合结构、________、树形结构和图状结构4种。

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

1、章节作业第一章概论1.设计算法在整型数组A[n]中查找值为K的元素,若找到,则输出其位置i(0≤i≤n-1),否则输出-1作为标志,并分析算法的时间复杂度。

int search (int A[],int n,int k){ int i;i=0;while (i<=n-1)if (A[i]!=k) i++;else break;if (i<=n-1) return I;else return -1;}当查找成功时,A[i]与k比较次数≤n;当查找不成功时,A[i]与k比较n次,所以,算法时间复杂度T(n)=O(n)。

2.写出计算方阵A[n][n]与B[n][n]乘积C[n][n]的算法,分析算法的时间复杂度。

void matrixmultiply (int A[][n],int B[][n],int C[][n],int n){ int I,j;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][j]*B[k][j];}}以方阵阶数n作为输出规模。

可知第二层循环中的第一条赋值语句共执行n2次,第三层循环体中的乘法和赋值语句共执行n3次,所以此算法的计算量为n3+n2,算法时间复杂T(n)=O(n3)第二章线性表1.设带头结点的单链表的结点结构如下:struct node { DataType data;struct node *next;} Node, *LinkList;试编写一个函数int count(LinkList head,DataType x)统计单链表中数据域为x的结点个数。

int count(LinkList head,DataType x){LinkList p=head->next;Int m=0;while (p!=NULL){ if(p->data==x) m++;p=p->next;}return m;}2.试分别以顺序表和带头结点的单链表作存储结构,各写一个实现线性表的就地(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表(a1,a2,…,an)逆置为(an,an-1,…,a1)。

顺序表逆置算法void inverse_sqlist(Seqlist L) {int m,n,k;DataType temp;m=0; n=L.length-1;while (m<n){ temp=L.data[m];L.data[m]=L.data[n];L.data[n]=temp;m++;n--;}}带头结点的单链表的逆置算法reverse_2(LinkList head){LinkList p,q;p=head->next;head->next=NULL;while (p!=NULL){q=p->next;p->next=head->next;head->next=p;p=q;}}第三章栈、队列和数组1.有一个整数序列,其输入顺序为20,30,90,-10,45,78,试利用栈将其输出序列改变为30,-10,45,90,78,20,试给出该整数序列进栈和出栈的操作步骤。

(用push(x)表示x进栈,pop(x)表示x出栈)push(20),push(30),pop(30),push(90),push(-10),pop(-10),push(45),pop(45 ),pop(90),push(78),pop(78),pop(20)2.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的站台,试写出这四辆列车开出车站的所有可能的顺序。

一号列车先出站:1234,1243,1324,1342,1432;二号列车先出站:2134,2143,2314,2341,2431;三好列车先出站:3214,3241,3421;四号列车先出站:4321;但是这里的 4123、4132、4213、4231都不是正解,所以共有14种可能3.假设以带头结点的循环链表表示队列,并且只设一个指针指向队列尾结点(注意不设头指针),试编写相应的初始化队列、入队列和出队列算法。

类型定义:typedef struct linksd_queue{DataType data;struct linked_queue *next;} LqueueTp;队列的初始化void InitQueue(LqueueTp *rear){ LqueueTp *p;p=(LqueueTp *)malloc(sizeof(LqueueTp)); rear=p;rear->next=rear;}入队列void EnQueue(LqueueTp *rear;DataType x) { LqueueTp *p;p=(LqueueTp*)malloc(sizeof(LqueueTp)); p->data=x;p->next=rear->next;rear->next=p;rear=p}出队列OutQueue(LqueueTp *rear,DataType *x) { LqueueTp *h,*p ;if (rear==rear->next){ error; return 0; }else {h=rear->next;p=h->next;*x=p->data;h->next=p->next;if (p==rear)rear=h;free(p);return 1;}}4.假设以数组cycque[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队列尾元素位置和内含元素的个数。

试给出此循环队列的队列满和队列空的条件,并写出相应的入队列和出队列的算法。

类型定义:typedef struct cycqueue{DataType data[m];int rear;int quelen;} CycqueueTp;CycqueueTp *cq队列满条件是:(cq->quelen==m)。

队列空条件是:(cq->quelen==0)入队列:int EnCycQueue(CycqueueTp *cq;DataType x){if (cq->quelen==m){ error; return 0;}else {cq->rear=(cq->rear+1)%m;cq->data[cq->rear]=x;cq->quelen=cq->quelen+1;return 1;}}出队列:int OutCyQueue(CycqueueTp *cq){if (cq->quelen==0){ error; return 0;}else {cq->quelen=cq->quelen-1;*x=cq->data[(cq->rear+m-cq->quelen)% m]; return 1;}}取队列首元素:DataType GetHead(CycqueueTp *cq){ DataType x;x=cq->data[cq->rear=m-cq->quelen]% m];return x;}第四章树和二叉树1.算法设计题(1)以二叉链表作存储结构,试编写求二叉树叶子结点个数的算法。

typedef struct btnode{ DataType data;struct btnode *lchild,*rchild;}*BinTree;int leafnode_num(BinTree bt ){if (bt==NULL) return 0 ;elseif (bt->lchild==NULL) && (bt->rchild==NULL)return 1;elsereturn leafnode_num (bt->lchild)+leafnode_num (bt->rchild); }(2)设计算法求二叉树的结点的个数。

typedef struct btnode{DataType data;struct btnode *lchild,*rchild;}*BinTree;int node_num (BinTree bt){if (bt==NULL) return 0;elsereturn node_num(bt->lchild)+node_num(bt->rchild)+1;}(3)设计算法按先序次序打印二叉树T中叶子结点的值。

typedef struct btnode{ int data;struct btnode *lchild,*rchild;}*BinTree;void preorder (BinTree bt){ if (bt!=NULL){ if ((bt->lchild==NULL) && (bt->rchild==NULL))printf(“%d”,bt->dta);preorder(bt->lchild);preorder(bt->rchild);}}2.树的存储结构采用孩子兄弟链表,试编写树的按层次遍历算法typedef struct tnode{ int data;struct tnode *son,*brother;}*Tree;void tree_travel (Tree root ){ InitQueue(Q);if (root1=NULL){ EnQueue( q , root );while (!EmptyQueue(Q)){ p=GetHead(Q);OutQueue (Q);prinf(“%d” , p->data);p=p->son;while (p!=NULL){ Enqueue (Q , p);p=p->brother;}}}}第五章图1.求下列有向图中从顶点v o到其余各顶点的最短路径及长度(给出求解的过程)。

2.写出将一个无向图的邻接矩阵转换成邻接表的算法。

#define vnum 20typedef struct graph{ VertexType vexs[vnum];int arcs[vnum][vnum];int vexnum,arcnum;} GraphTp_Mat;typedef struct arcnode{int adjvex;struct arcnode *nextarc;} ArcNodeTp;typedef struct vexnode{ int vertex;ArcNodeTp *firstarc;AdjLis[vnum];typedef struct graph{ AdjLis adjlist;int vexnum,arcnum;} GraphTp_Adj;void Matrix_to_Adjlis(GraphTp_Mat *ga,GraphTp_Adj *gp) { int I,j;ArcNodeTp *p;gp->vexnum=ga->vexnum;gp->arcnum=ga->arcnum;for ( i =0;I<ga->vexnum;i++){ gp->adjlis[i].vertex=I;gp->adjlis[i].firstarc=NULL;}for (i=0;I<ga->vexnum;i++)for (j=0;j<ga->vesnum;j++)if (ga->arcs[i][j]==1)}p=(ArcNodeTp *)malloc(sizeof(ArcNodeTp));p->adjvex=j;p->nextarc=ga->adjlis[i].firstarc;ga->adjlis[i].firstarc=p;}}第六章查找1.假设线性表中结点是按键值递增的顺序排列,试写一顺序查找算法,将岗哨设在高下标端。

相关文档
最新文档