数据结构单元练习4

合集下载

数据结构习题答案.doc

数据结构习题答案.doc

数据结构习题答案.doc单元练习1一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。

(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。

(ㄨ)(3)数据元素是数据的最小单位。

(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。

(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。

(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。

(√)(7)数据的存储结构是数据的逻辑结构的存储映像。

(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。

(ㄨ)(9)数据的逻辑结构是依赖于计算机的。

(√)(10)算法是对解题方法和步骤的描述。

二.填空题(1)数据有逻辑结构和存储结构两种结构。

(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。

(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。

(4)树形结构和图形结构合称为非线性结构。

(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。

(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。

(7)数据的存储结构又叫物理结构。

(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。

(9)线性结构中的元素之间存在一对一的关系。

(10)树形结构结构中的元素之间存在一对多的关系,(11)图形结构的元素之间存在多对多的关系。

(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。

(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D 上的关系的有限集合。

(14)算法是一个有穷指令的集合。

(15)算法效率的度量可以分为事先估算法和事后统计法。

(16)一个算法的时间复杂性是算法输入规模的函数。

(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n的函数。

数据结构(专)阶段练习4

数据结构(专)阶段练习4

华东理工大学网络学院(专科)《数据结构》------ch7图、ch9排序班级学号姓名成绩一、填空题(每空1分,共10分)1.具有n个顶点的有向图最多有n(n-1)条边。

2.在无向图G的邻接矩阵中,求第i个结点的度的方法是求邻接矩阵第i行非零元素之和。

3.堆排序通常采用顺序存储结构。

4. 与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。

5.具有8个顶点的有向完全图有56 条弧。

6. 在无向图G的邻接矩阵A中,若A[i][j]等于1,则A[j][i]等于 1 。

7.在一个待排序的序列中,只有很少量元素不在自己最终的正确位置上,但离他们的正确位置都不远,则使用直接插入排序方法最好。

8. 已知有向图的邻接矩阵,要计算i号顶点的入度,计算方法是:将i列元素累加。

9. n个顶点的强连通图至少有n 条边,至多有n(n-1) 条边。

二、判断正误(对的用”T”表示,错误的用”F”表示。

每小题1分,共10分)1. ( T )若一个有向图的邻接矩阵中对角线以下元素均为零,则该图的拓扑有序序列必定存在。

2. ( F )快速排序的速度在所有的排序方法中为最快,而且所需附加空间也最少。

3.( F )采用邻接表存储的图的深度优先遍历算法类似二叉树的按层次遍历算法。

4.(T )在待排序的元素序列基本有序的前提下,效率最高的是插入排序。

5.(T )图的广度优先遍历类似于树的层次遍历。

6.(T )拓扑排序时,总是在有向图中选择入度为0的顶点输出。

7.( F )若要求一个稠密图G的最小生成树,最好用Kruscal算法来求解。

8.(T )拓扑排序输出的顶点数小于有向图的顶点数,则该图一定存在回路。

9.(T )设有一稠密图G,则G采用邻接矩阵存储较省空间。

10.(F)n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为O(n+e)。

三、单项选择题(每小题2分,共20分)1.已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是 C 。

(完整版)数据结构单元4练习参考答案

(完整版)数据结构单元4练习参考答案

单元测验4一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)队列是限制在两端进行操作的线性表。

(√)(2)判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。

(×)(3)在链队列上做出队操作时,会改变front指针的值。

(√)(4)在循环队列中,若尾指针rear大于头指针front,其元素个数为rear- front。

(×)(5)在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是p=h。

(√)(6)链队列在一定范围内不会出现队满的情况。

(×)(7)在循环链队列中无溢出现象。

(×)(8)栈和队列都是顺序存储的线性结构。

(×)(9)在队列中允许删除的一端称为队尾。

(×)(10)顺序队和循环队关于队满和队空的判断条件是一样的。

二.填空题(1)在队列中存取数据应遵循的原则是先进先出。

(2)队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

(3)在队列中,允许插入的一端称为队尾。

(4)在队列中,允许删除的一端称为队首(或队头)。

(5)队列在进行出队操作时,首先要判断队列是否为空。

(6)顺序队列在进行入队操作时,首先要判断队列是否为满。

(7)顺序队列初始化后,front=rear= -1 。

(8)解决顺序队列“假溢出”的方法是采用循环队列。

(9)循环队列的队首指针为front,队尾指针为rear,则队空的条件为 front == rear 。

(10)链队列LQ为空时,LQ->front->next= NULL 。

(11)设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为 O(n)。

(12)设长度为n的链队列用单循环链表表示,若只设尾指针,则出队操作的时间复杂度为 0(1)。

(13)在一个链队列中,若队首指针与队尾指针的值相同,则表示该队列为空。

(14)设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为:front==(rear+1)%MAXLEN 。

(完整word版)数据结构 第四章(串) 考试题目(word文档良心出品)

(完整word版)数据结构 第四章(串) 考试题目(word文档良心出品)

第四章串一单项选择题:1.下列那些为空串()A)S=“ ” B)S=“”C)S=“φ” D)S=“θ”2.S1=“ABCD”,S2=“CD”则S2在S3中的位置是()A)1 B)2 C)3D)43.假设S=“abcaabcaaabca”,T=“bca”,Index (S,T,3) 的结果是()A)2 B)6 C)11 D)04.在串中,对于SubString(&Sub,S,pos,len)基本操作,pos和len的约束条件是()A)0<pos<StrLength(S)+1且1<=len<=StrLength(S)-pos+1B)0<pos<StrLength(S)+1且0<=len<=StrLength(S)-pos-1C)1<=pos<=StrLength(S) 且0<=len<=StrLength(S)-pos+1D)1<=pos<=StrLength(S) 且1<=len<=StrLength(S)-pos-15. 串是一种特殊的线性表,其特殊性体现在( )。

A.可以顺序存储B. 数据元素是一个字符C.可以链接存储D. 数据元素可以是多个字符6. 串是( )。

A.少于一个字母的序列B. 任意个字母的序列C.不少于一个字符的序列D. 有限个字符的序列7. 串的长度是( )。

A.串中不同字母的个数B. 串中不同字符的个数C.串中所含的字符的个数D. 串中所含字符的个数,且大于08. 设有S1=‘ABCDEFG’,S2=‘PQRST’,函数con(x,y)返回x和y串的连接串,subs(I,j)返回串S的从序号I的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(S1,2,len(S2)),subs(S1,len(S2),2))的结果是( )。

A.BCDEF B. BCDEFG C. BCPQRST D. BCDEFEF9. 若某串的长度小于一个常数,则采用( )存储方式最为节省空间。

数据结构 第四章测验 测验答案 慕课答案 UOOC优课 课后练习 深圳大学

数据结构 第四章测验 测验答案 慕课答案 UOOC优课 课后练习 深圳大学

数据结构第四章测验一、单选题 (共100.00分)1. 以下结构中,哪一个是属于逻辑结构()A. 顺序表B. 链栈C. 循环队列D. 串正确答案:D2. 以下哪一种是串在计算机中的常见表示方式()A. 定长顺序B. 堆分配C. 块链D. 前三种都是正确答案:D3. 在数据结构中,串可以等同于()的处理A. 整数串B. 浮点数串C. 字符串D. 多种类型的数组正确答案:C4. 以下哪一种是串匹配的常用算法()A. 普里姆算法B. 克鲁斯卡尔算法C. KMP算法D. 关键路径算法正确答案:C5. 已知主串为abcbcaddabc,模式串为cad,假设串位置从1开始,则串匹配位置是()A. 3B. 5C. 7D. 不存在正确答案:B6. 已知模式串为abaab,则next数组为()A. 1122B. 22312C. 1212D. 1112正确答案:A7. 已知串S的内容为1+2+3,以下描述哪一个是正确的()A. 串S的长度是6B. 串S的运算结果是6C. 整数1是串S的子串D. 符号+是串S的子串正确答案:D8. 以下描述哪一个是正确的()A. 串是字符有限序列B. 串是整数、浮点数、字符等多种数据的有限序列C. 只包含空格的串称为空串D. 串只能使用顺序表存储正确答案:A9. 串的长度是指()A. 串中包含不同字母的个数B. 串中所含字符的个数C. 串中包含不同字符的个数D. 串中包含非空格的字符的个数正确答案:B10. 串函数Sub(S, x, y)表示在串S中,从x位置开始,取出y个字符,串位置从1开始计算。

已知串S内容为Shenzh en,则Sub(S, 2, 3)是()A. SheB. zhenC. ShenD. hen正确答案:D。

数据结构第四章串习题及答案

数据结构第四章串习题及答案

习题四串一、单项选择题‎1.下面关于串‎的的叙述中‎,哪一个是不‎正确的?()A.串是字符的‎有限序列 B.空串是由空‎格构成的串‎C.模式匹配是‎串的一种重‎要运算 D.串既可以采‎用顺序存储‎,也可以采用‎链式存储2.串是一种特‎殊的线性表‎,其特殊性体‎现在()。

A.可以顺序存‎储 B.数据元素是‎一个字符C.可以链接存‎储 D.数据元素可‎以是多个字‎符3.串的长度是‎指()A.串中所含不‎同字母的个‎数 B.串中所含字‎符的个数C.串中所含不‎同字符的个‎数 D.串中所含非‎空格字符的‎个数4.设有两个串‎p和q,其中q是p‎的子串,求q在p中‎首次出现的‎位置的算法‎称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“softw‎a re”,其子串的个‎数是()。

A.8 B.37 C.36 D.9二、填空题1.含零个字符‎的串称为_‎_____‎串。

任何串中所‎含____‎__的个数‎称为该串的‎长度。

2.空格串是指‎__ __,其长度等于‎__ __。

3.当且仅当两‎个串的__‎____相‎等并且各个‎对应位置上‎的字符都_‎_____‎时,这两个串相‎等。

一个串中任‎意个连续字‎符组成的序‎列称为该串‎的____‎__串,该串称为它‎所有子串的‎_____‎_串。

4.INDEX‎(‘DATAS‎T RUCT‎U RE’,‘STR’)=_____‎___。

5.模式串P=‘abaab‎c ac’的next‎函数值序列‎为____‎____。

6.下列程序判‎断字符串s‎是否对称,对称则返回‎1,否则返回0‎;如 f("abba")返回1,f("abab")返回0;int f((1)__ _____‎_){int i=0,j=0;while‎(s[j])(2)___ _____‎;for(j--; i<j && s[i]==s[j]; i++,j--);retur‎n((3)___ ____)}7.下列算法实‎现求采用顺‎序结构存储‎的串s和串‎t的一个最‎长公共子串‎。

《数据结构》试卷四含答案

《数据结构》试卷四含答案

《数据结构》试卷四一、选择题(本题共20分,每小题1分)1.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构 B. 紧凑结构和非紧凑结构C. 线性结构和非线性结构D. 内部结构和外部结构2.线性表若采用链式存储结构时,要求内存中可用存储单元的地址 ( ) 。

A. 必须是连续的B. 部分地址必须是连续的C. 一定是不连续的D. 连续不连续都可以3.不带头结点的单链表 head 为空的判定条件是( ) 。

A. head == NULLB. head->next ==NULLC. head->next == headD. head! = NULL4.在一个单链表中,已知 q 所指结点是 p 所指结点的前驱结点,若在 q 和 p 之间插入s 结点,则执行( ) 。

A. s-next=p-next; p-next=s;B. p->next=s->next; s-next=p;C. q->next=s; s->next=p;D. p-next=s; s->next=q;5.从一个具有n个结点的单链表中查找其值等于 x 结点时,在查找成功的情况下,需平均比较( )个结点。

A. nB. n/2C. (n-1)/2D. (n+1)/26.一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( )。

A. edcbaB. decbaC. dceabD. abcde 7.判定一个循环队列 QU(最多元素为 m0)为满队列的条件是( )。

A. QU->front==QU->rearB. QU->front!=QU->rearC. QU->front==(QU->rear+1) % m0D. QU->front!=(QU->rear+1) % m0 8.栈和队列的共同点是( ) 。

A. 都是先进后出B. 都是先进先出C. 只允许在端点处插入和删除元素D. 没有共同点9.数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA 开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为( ) 。

数据结构练习题及答案

数据结构练习题及答案

数据结构练习题(一)一、单选题1.栈和队列的共同特点是( )。

A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.用链接方式存储的队列,在进行插入运算时( )。

A. 仅修改头指针B. 头、尾指针都要修改C. 仅修改尾指针D.头、尾指针可能都要修改3.以下数据结构中( )是非线性结构。

A. 队列B. 栈C. 线性表D. 二叉树4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在()位置。

脚注(10)表示用10进制表示。

A.688 B.678 C.692 D.6965.树最适合用来表示( )。

A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据6.二叉树的第k层的结点数最多为( )。

A.2k-1 +1 D. 2k-17.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )。

A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,38.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有()个。

A.1 B.2 C.3 D.49.设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。

二、填空题1.通常从四个方面评价算法的质量:_________、_________、_________和_________。

2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。

3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为__________个,树的深度为___________,树的度为_________。

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

单元测验4一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(√)(1)队列是限制在两端进行操作的线性表。

(√)(2)判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。

(×)(3)在链队列上做出队操作时,会改变front指针的值。

(√)(4)在循环队列中,若尾指针rear大于头指针front,其元素个数为rear- front。

(×)(5)在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是p=h。

(√)(6)链队列在一定范围内不会出现队满的情况。

(×)(7)在循环链队列中无溢出现象。

(×)(8)栈和队列都是顺序存储的线性结构。

(×)(9)在队列中允许删除的一端称为队尾。

(×)(10)顺序队和循环队关于队满和队空的判断条件是一样的。

二.填空题(1)在队列中存取数据应遵循的原则是先进先出。

(2)队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

(3)在队列中,允许插入的一端称为队尾。

(4)在队列中,允许删除的一端称为队首(或队头)。

(5)队列在进行出队操作时,首先要判断队列是否为空。

(6)顺序队列在进行入队操作时,首先要判断队列是否为满。

(7)顺序队列初始化后,front=rear= -1 。

(8)解决顺序队列“假溢出”的方法是采用循环队列。

(9)循环队列的队首指针为front,队尾指针为rear,则队空的条件为 front == rear 。

(10)链队列LQ为空时,LQ->front->next= NULL 。

(11)设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为 O(n)。

(12)设长度为n的链队列用单循环链表表示,若只设尾指针,则出队操作的时间复杂度为 0(1)。

(13)在一个链队列中,若队首指针与队尾指针的值相同,则表示该队列为空。

(14)设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为:front==(rear+1)%MAXLEN 。

(15)在一个链队列中,若队首指针为front,队尾指针为rear,则判断该队列只有一个结点的条件为:front==rear && front !=NULL 。

( 或front==rear && front <>NULL )(16)向一个循环队列中插入元素时,首先要判断队尾指针,然后再向指针所指的位置写入新的数据。

(17)读队首元素的操作不改变(或不影响)队列元素的个数。

(18)设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有 front=11,rear=19,则循环队列中还有 8 个元素。

(L= (N+rear-front)% N=(40+19-11)% 40=8)(19)队列Q,经过下列运算:InitQueue(Q)(初始化队列);InQueue(Q,a); InQueue(Q,b);OutQueue(Q,x); ReadFront(Q,x);QEmpty(Q);后的值是 0 。

(20)队列Q经过InitQueue(Q)(初始化队列);InQueue(Q,a);InQueue(Q,b); ReadFront(Q,x)后,x的值是 a 。

三.选择题(1)队列是限定在( D )进行操作的线性表。

A.中间 B.队首 C.队尾D.端点(2)队列中的元素个数是( B )。

A.不变的 B.可变的 C.任意的 D.0(3)同一队列内各元素的类型( A )。

A.必须一致 B.不能一致 C.可以不一致 D.不限制(4)队列是一个( C )线性表结构。

A.不加限制的 B.推广了的 C.加了限制的 D.非(5)当利用大小为n的数组顺序存储一个队列时,该队列的最后一个元素的下标为( B )。

A.n-2 B.n-1 C.n D.n+1(6)一个循环队列一旦说明,其占用空间的大小( A )。

A.已固定 B.可以变动 C.不能固定D.动态变化(7)循环队列占用的空间( A )。

A.必须连续 B.不必连续 C.不能连续D.可以不连续(8)存放循环队列元素的数组data有10个元素,则data数组的下标范围是( B )。

A.0..10 B.0..9 C. 1..9 D.1..10(9)若进队的序列为:A,B,C,D,则出队的序列是( C )。

A.B,C,D,A B.A,C,B,DC.A,B,C,D D.C,B,D,A(10)四个元素按:A,B,C,D顺序连续进队Q,则队尾元素是( D )。

A. A B. BC. C D. D(11)四个元素按:A,B,C,D顺序连续进队Q,执行一次OutQueue(Q)操作后,队头元素是( B )。

A. A B. B C. C D. D(12)四个元素按:A,B,C,D顺序连续进队Q,执行四次OutQueue(Q)操作后,再执行QEmpty(Q);后的值是( B )。

A. 0 B. 1 C. 2 D. 3(13)队列Q,经过下列运算后,x 的值是( B )。

InitQueue(Q)(初始化队列);InQueue(Q,a); InQueue(Q,b);OutQueue(Q,x);ReadFront (Q,x);A.a B.b C.0 D.1(14)循环队列SQ队满的条件是( B )。

A.SQ->rear==SQ->front B.(SQ->rear+1)% MAXLEN ==SQ->frontC.SQ->rear==0 D.SQ->front==0 (15)设链栈中结点的结构:data为数据域,next为指针域,且top是栈顶指针。

若想在链栈的栈顶插入一个由指针s所指的结点,则应执行下列( A )操作。

A.s->next=top->next;top->next=s;B.top->next=s;C.s->next=top;top=top->next;D.s->next=top;top=s;(16)带头结点的链队列LQ示意图如下,链队列的队头元素是( A )LQ->rearA.A B.B C.C D.D(17)带头结点的链队列LQ示意图如下,指向链队列的队头指针是( C )LQ->rearA.LQ->front B.LQ->rearC.LQ->front->next D.LQ->rear->next (18)带头结点的链队列LQ示意图如下,在进行进队运算时指针LQ->front( A )LQ->frontLQ->rearA.始终不改变 B.有时改变 C.进队时改变D.出队时改变(19)队列Q,经过下列运算后,再执行QEmpty(Q) 的值是( C )。

InitQueue(Q) (初始化队列);InQueue(Q,a); InQueue(Q,b);OutQueue(Q,x);ReadQueue(Q,x);A.a B. b C.0 D.1(20)若用一个大小为6的数组来实现循环队列,且当前front和rear的值分别为3和0,当从队列中删除一个元素,再加入两个元素后,front和rear的值分别为( B )。

A.5和1 B.4和2 C.2和 4 D.1和5四.写出程序运行的结果写出下列程序段的输出结果(队列中的元素类型为char)。

void main( ){Queue Q; InitQueue (Q); // 初始化队列char x="E"; y="C";InQueue (Q, "H");InQueue (Q, "R");InQueue (Q, y);OutQueue (Q,x); InQueue (Q,x);OutQueue (Q,x); InQueue (Q, "A");while (!QEmpty(Q)){OutQueue (Q,y);printf(y);};printf(x);}答:输出为“CHAR”。

五.程序填空1.假定用一个循环单链表表示一个循环队列,该队列只设一个队尾指针rear,试填空完成向循环队列中插入一个元素为x的结点的函数。

typedef struct queuenode // 定义队列的存储结构{ int data;struct queuenode *next;}qu;InQueue(rear,x) // 向队列插入元素为x的函数{ qu *rear;int x;{ qu *head,*s;s= new qu ;s->data= x ;if (rear==NULL) // 循环队列为空,则建立一个结点的循环队列{ rear=s; rear->next;}else{ head= rear->next ; // 循环队列非空,则将s插到后面rear->next= s ;rear=s;rear->next =head;}}六. 算法设计题1.设一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的记数器cont,试写出相应的入队算法和出队算法。

2.用一个循环数组Q[0..MAXLEN-1]表示队列时,该队列只有一个头指针front,不设尾指针,而改置一个记数器count 用以记录队列中结点的个数。

试编写一个能实现:初始化队列、判队空、读队头元素、入队操作和出队操作的算法。

3.一个用单链表组成的循环队列,只设一个尾指针rear,不设头指针,请编写他如下算法:(1)向循环队列中插入一个元素为x的结点;(2)从循环队列中删除一个结点。

1.解:用一个循环数组Queue[0,n-1]表示该循环队列,头指针为front,计数器count用来记录队列中结点的个数。

(1)入队算法:void inqueue(int x){ int temp;if (count==n)printf(" 队列上溢出\n");else{ count++temp=(front+count)%n;Queue[temp]=x}}(2)出队算法:int outqueue(){ int temp;if (count==0)printf(" 队列下溢出\n");else{ temp=Queue[front];front=(front+1)%n;count--;return temp;}}2.解:队列为空:count==0队列为满:count=MAXLEN队尾第一个元素位置==(front+count)%MAXLEN队首第一个元素位置==(front+1)%MAXLENconst MAXLEN=100;int queue[MAXLEN];int front,count; // 定义队头和计数器count(1)初始化队列void init(){front=1;count=0;}(2)判定队空int QEmpty(){if (count==0)return(1);elsereturn(0);}(3)读队头元素void ReadFront(int queue[],x){if (count==0)printf(" 下溢出\n");else{front=(front+1)%MAXLEN;x=queue[front];}}(4)入队操作void InQueue(int queue[],int x) {int place;if (count==MAXLEN)printf(" 上溢出\n");else{count++;place=(front+count)%MAXLEN;queue[MAXLEN]=x;}}(5)出队操作void OutQueue(int queue[]) // 删除队列头元素{if (count==0)printf(" 队列下溢出\n");else{front=(front+1)%MAXLEN;count--;}}3.(1)解:定义本题队列的结点类型如下:typedef struct linknode{int data;struct linknode *next;}qu;qu *rear;inqueue(int x) // 向队列插入结点x {qu *head, *s;s=(qu *) new qu; // 创建一个新结点s->data=x;if (rear==NUlL) // 若队空,则建立一个循环队列{rear=s;rear->next=s;}else // 若不为空,则将s 插到后面{head=rear->next;rear->next=s;rear=s; // rear始终指向最后一个结点rear->next=head;}}(2)解:void delqueue(rear){if (rear==NULL)printf(" 下溢出!\n");else{head=rear->next; // head指向队首结点 if (head==rear)rear=NULL // 只有—个结点则直接删除该结点elserear->next=head->next // 否则删除第一个结点delete head; // 释放队首结点 }}。

相关文档
最新文档