数据结构单元4练习参考答案
数据结构第四章考试题库(含答案)

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的()【北方交通大学 2001 一、5(2分)】A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index (S2,‘8’),length(S2)))其结果为()【北方交通大学 1999 一、5 (25/7分)】A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###012343.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长【北京邮电大学 2000 二、4(20/8分)】【西安电子科技大学 1996 一、1 (2分)】4.已知串S=‘aaab’,其Next数组值为()。
【西安电子科技大学 1996 一、7 (2分)】A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next数组为()。
【中山大学 1999 一、7】A.0 B.012121111212 C.0 D.06.字符串‘ababaabab’的nextval 为()A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )【北京邮电大学 1999 一、1(2分)】7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval 数组的值为()。
数据结构第四五六七章作业答案

数据结构第四五六七章作业答案数据结构第四、五、六、七章作业答案第四章和第五章一、填空题1.不包含任何字符(长度为0)的字符串称为空字符串;由一个或多个空格(仅空格字符)组成的字符串称为空白字符串。
2.设s=“a;/document/mary.doc”,则strlen(s)=20,“/”的位置为3。
3.子串的定位操作称为串模式匹配;匹配的主字符串称为目标字符串,子字符串称为模式。
4、串的存储方式有顺序存储、堆分配存储和块链存储5.有一个二维数组a[0:8,1:5],每个数组元素用四个相邻字节存储,内存用字节寻址。
假设存储阵列元素a[0,1]的地址为100,如果以主行顺序存储,则a[3,5]的地址为176,[5,3]的地址为208。
如果按列存储,[7,1]的地址为128,[2,4]的地址为216。
6、设数组a[1…60,1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950。
7、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
8、二维数组a[10][20]采用列序为主方式存储,每个元素占10个存储单元,且a[0][0]的存储地址是2000,则a[6][12]的地址是32609.已知二维数组a[20][10]按行顺序存储,每个元素占2个存储单元,a[10][5]的存储地址为1000,则a[18][9]的存储地址为116810。
已知二维数组a[10][20]按行顺序存储,每个元素占2个存储单元,a[0][0]的存储地址为1024,则a[6][18]的地址为130011,两个字符串相等。
充要条件是长度相等,相应位置的字符相同。
12、二维数组a[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且a[0][0]的存储地址是200,则a[6][12]的地址是200+(12*10+6)=326。
数据结构教程李春葆课后答案第4章串

8. 采用顺序结构存储串,设计一个实现串通配符匹配的算法 pattern_index(),其中的 通配符只有‘?’ ,它可以和任一个字符匹配成功。例如,pattern_index("?re","there are") 返回的结果是 2。 解:采用 BF 算法的穷举法的思路,只需要增加对‘?’字符的处理功能。对应的算法 如下:
void maxsubstr(SqString s,SqString &t) { int maxi=0,maxlen=0,len,i,j,k; i=0; while (i<s.length) //从下标为 i 的字符开始 { j=i+1; //从 i 的下一个位置开始找重复子串 while (j<s.length) { if (s.data[i]==s.data[j]) //找一个子串,其起始下标为 i,长度为 len { len=1; for(k=1;s.data[i+k]==s.data[j+k];k++) len++; if (len>maxlen) //将较大长度者赋给 maxi 与 maxlen { maxi=i; maxlen=len; } j+=len; } else j++; } i++; //继续扫描第 i 字符之后的字符 } t.length=maxlen; //将最长重复子串赋给 t for (i=0;i<maxlen;i++) t.data[i]=s.data[maxi+i]; }
SqString CommChar(SqString s1,SqString s2) { SqString s3; int i,j,k=0; for (i=0;i<s1.length;i++) { for (j=0;j<s2.length;j++) if (s2.data[j]==s1.data[i]) break; if (j<s2.length) //s1.data[i]是公共字符 { s3.data[k]=s1.data[i]; k++; } } s3.length=k; return s3; }
数据结构第三四章习题答案

第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { 线性表的链式存储结构 D. 栈(11)用链接方式存储的队列,在进行删除运算时()。
A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改(12)循环队列存储在数组A[0..m]中,则入队时的操作为()。
A. rear=rear+1B. rear=(rear+1)%(m-1)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1)%n==frontB. rear==frontC.rear+1==front D. (rear-l)%n==front(14)栈和队列的共同点是()。
数据结构第四章考试题库(含答案)

第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的?()【北方交通大学 2001 一、5(2分)】A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,i ndex(S2,‘8’),length(S2))) 其结果为()【北方交通大学 1999 一、5 (25/7分)】A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345E.ABC###G1234 F.ABCD###1234 G.ABC###012343.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长【北京邮电大学 2000 二、4(20/8分)】【西安电子科技大学 1996 一、1 (2分)】4.已知串S=‘aaab’,其Next数组值为()。
【西安电子科技大学 1996 一、7 (2分)】A.0123 B.1123 C.1231 D.12115.串‘ababaaababaa’的next数组为()。
【中山大学 1999 一、7】A.9 B.2 C.6 D.456.字符串‘ababaabab’的nextval 为()A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )【北京邮电大学 1999 一、1(2分)】7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval数组的值为()。
数据结构1-4章习题答案

第一章绪论一、选择题1.D2.C3.C4.B5.D6.C7.D8.C9.A 10.D11.D 12.B二、填空题1. 逻辑结构存储结构运算2. 集合结构线性结构树形结构图状结构3. 有穷性. 确定性. 可行性. 输入. 输出4. 顺序存储. 链式存储5. 数据元素6. 线性结构非线性结构三、简答题1. 尽管算法的含义与程序非常相似,但两者还是有区别的。
首先,一个程序不一定满有穷性,因为它不是一个算法。
其次,程序中的指令必须是计算机可以执行的,而算法中的指令却无此限制。
如果一个算法采用机器可执行的语言来书写,那么它就是一个程序。
2. 数据结构是指数据对象以及该数据对象集合中的数据元素之间的相互关系(数据元素的组织形式)。
例如:队列的逻辑结构是线性表(先进后出);队列在计算机中既可以采用顺序存储也可以采用链式存储;队列可进行删除数据元素. 插入数据元素. 判断是否为空队列,以及队列置空等操作。
3. 数据元素之间的逻辑关系,也称为数据的逻辑结构。
数据元素以及它们之间的相互关系在计算机存储器内的表示(又称映像)称为数据的存储结构,也称数据的物理结构。
4. 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。
此外,一个算法还具有下列5个特性:(1)有穷性:一个算法必须在执行有穷步之后结束,即算法必须在有限时间内完成。
(2)确定性:算法中每一步必须有明确的含义,不会产生二义性。
并且,在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出。
(3)可行性:一个算法是能执行的,即算法中的每一步都可以通过已经实现的基本运算执行有限次得以实现。
(4)输入:一个算法有零个或者多个输入,它们是算法开始时对算法给出的初始量。
(5)输出:一个算法有一个或者多个输出,它们是与输入有特定关系的量5. 举例说明四种基本结构的区别:集合: 数据元素之间无任何关系,如集合A={x,5,t,&};线性结构: 数据元素之间存在一个对一个的关系,如线性表L=(2,3,4,5,7,10);树形结构: 数据元素之间存在一个对多个的关系,如文件系统目录管理;图状结构: 数据元素之间存在多个对多个的关系,如教学计划课程安排顺序图。
数据结构第4-5章作业及答案

数据结构第4-5章作业及答案⼀、填空题1. 不包含任何字符(长度为0)的串称为空串;由⼀个或多个空格(仅由空格符)组成的串称为空⽩串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的位置为3。
3. ⼦串的定位运算称为串的模式匹配;被匹配的主串称为⽬标串,⼦串称为模式。
4、若n为主串长,m为⼦串长,则串的古典(朴素)匹配算法最坏的情况下需要⽐较字符的总次数为(n-m+1)*m。
5、假设有⼆维数组A6×8,每个元素⽤相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第⼀个字节地址为1282 ;若按⾏存储时,元素A14的第⼀个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第⼀个字节地址为(6×7+4)×6+1000)=1276 。
(注:数组是从0⾏0列还是从1⾏1列计算起呢?由末单元为A57可知,是从0⾏0列开始!)6、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。
答:不考虑0⾏0列,利⽤列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)* (60-1+1)+32-1]]*2=89507、三元素组表中的每个结点对应于稀疏矩阵的⼀个⾮零元素,它包含有三个数据项,分别表⽰该元素的⾏下标、列下标和元素值。
8、⼆维数组A[10][20]采⽤列序为主⽅式存储,每个元素占10个存储单元,且A[0][0]的存储地址是2000,则A[6][12]的地址是32609、已知⼆维数组A[20][10]采⽤⾏序为主⽅式存储,每个元素占2个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的存储地址是 116810、⼴义表((a,b),c,d)的表头是(a,b) ,表尾是 (c,d)11、⼴义表((((a),b),c),d)的表头是(((a),b),c) ,表尾是(d)12、已知⼆维数组A[10][20]采⽤⾏序为主⽅式存储,每个元素占2个存储单元,并且A[0][0]的存储地址是1024, 则A[6][18]的地址是130013、若串的长度不能确定,可采⽤动态存储结构,为串值分配⼀个存储空间,同时建⽴⼀个串的描述⼦以指⽰串值的长度和串在存储空间中的位置,称该结构为堆/堆结构14、稀疏矩阵⼀般的压缩存储⽅法有两种,即三元组表和⼗字链表。
数据结构模拟试题4参考答案.

数据结构模拟试题4参考答案一、选择题(20分)1-5 A C A B D6-10 B B C A D二、填空题(20分)1.n2.只由空格字符组成的字符串空格字符的个数3.5 34.k(k+1)/25.36.77.128.二叉树无左子树三、应用题(30分)1.参考答案如下:2.参考答案如下:1)2)9 4 3 8 10 7 6 56 8 94 5 103 76 4 3 8 5 79 103.参考答案如下:4.参考答案如下: 1)25.参考答案如下:1)哈希表a 及其生成过程如下:19:5 24:310:3,417:3,4,5,615:138:3,4,5,6,718:4,5,6,7,840:5,6,7,8,9ASL=(1+1+2+4+1+5+5+5)/8=24/8=30 1 2 3 4 52)哈希表b及其生成过程如下:19:524:310:3,417:3,4,215:138:3,4,2,718:4,5,3,840:5,6,4,9ASL=(1+1+2+3+1+4+4+4)/8=20/8=2.50 1 2 3 4 56.参考答案如下:四.算法设计题(30分)1.算法源代码如下:void delete(link h){link q, p;p=h->next;while(p!=NULL){ q=p;p=p->next;while(p->data==q->data){ q->next=p->next; free(p);p=q->next;}}}2.算法源代码如下:void huffmancode(htnode *ht, int m, char *hc[], int n){ int i,start,c,p;char cd[m]; cd[m-1]='\0';for(i=0;i<n;++i){ start=m-1; c=i; p=ht[i].parent;while(p!=-1){ if(ht[p].lchild==c) cd[--start]='0';else cd[--start]='1';c=p; p=ht[p].parent; }strcpy(hc[i],&cd[start]); }}3.算法源代码如下:int idk(algraph graph, int k){ arcptr p;int count=0, i;/*求邻接表中顶点k的入度*/for (i=1;i<=graph.vexnum;++i){ p=graph.vertices[i].firstarc;while(p!=NULL){ if(p->adjvex==k) count++;p=p->nextarc; }}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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->front C.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 )A.A B.B C.C D.D(17)带头结点的链队列LQ示意图如下,指向链队列的队头指针是( C )A.LQ->front B.LQ->rearC.LQ->front->next D.LQ->rear->next(18)带头结点的链队列LQ示意图如下,在进行进队运算时指针LQ->front( A ) LQ->frontA.始终不改变 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 inqueqe(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;// 释放队首结点}}。