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

上传人:壹****1 文档编号:573479054 上传时间:2024-08-14 格式:PDF 页数:8 大小:261.70KB
返回 下载 相关 举报
(完整版)数据结构单元4练习参考答案_第1页
第1页 / 共8页
(完整版)数据结构单元4练习参考答案_第2页
第2页 / 共8页
(完整版)数据结构单元4练习参考答案_第3页
第3页 / 共8页
(完整版)数据结构单元4练习参考答案_第4页
第4页 / 共8页
(完整版)数据结构单元4练习参考答案_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《(完整版)数据结构单元4练习参考答案》由会员分享,可在线阅读,更多相关《(完整版)数据结构单元4练习参考答案(8页珍藏版)》请在金锄头文库上搜索。

1、 79 单元测验 4 一判断题(下列各题,正确的请在前面的括号内打;错误的打 ) () (1)队列是限制在两端进行操作的线性表。 () (2)判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。 () (3)在链队列上做出队操作时,会改变 front 指针的值。 () (4)在循环队列中,若尾指针 rear 大于头指针 front,其元素个数为 rear- front。 () (5)在单向循环链表中,若头指针为 h,那么 p 所指结点为尾结点的条件是 p=h。 () (6)链队列在一定范围内不会出现队满的情况。 () (7)在循环链队列中无溢出现象。 () (8)栈和队列都是顺序存储的线性

2、结构。 () (9)在队列中允许删除的一端称为队尾。 () (10)顺序队和循环队关于队满和队空的判断条件是一样的。 二填空题 (1) 在队列中存取数据应遵循的原则是 先进先出 。 (2) 队列 是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 (3) 在队列中,允许插入的一端称为 队尾 。 (4) 在队列中,允许删除的一端称为 队首(或队头) 。 (5) 队列在进行出队操作时,首先要判断队列是否为 空 。 (6) 顺序队列在进行入队操作时,首先要判断队列是否为 满 。 (7) 顺序队列初始化后,front=rear= -1 。 (8) 解决顺序队列“假溢出”的方法是采

3、用 循环队列 。 (9) 循环队列的队首指针为 front,队尾指针为 rear,则队空的条件为 front = rear 。 (10) 链队列LQ为空时,LQ-front-next= NULL 。 (11) 设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为 O(n)。 (12) 设长度为n的链队列用单循环链表表示,若只设尾指针,则出队操作的时间复杂度为 0(1) 。 (13) 在 一个链 队列中 ,若队 首指针 与队尾 指针的 值相同 ,则表 示该队 列为 空 。 80 (14) 设循环队列的头指针front指向队首元素, 尾指针rear指向队尾元素后的一个空 闲

4、元 素 , 队 列 的 最 大 空 间 为 MAXLEN , 则 队 满 标 志 为 : front=(rear+1)%MAXLEN 。 (15) 在一个链队列中,若队首指针为front,队尾指针为rear,则判断该队列只有一个结点的条件为: front=rear & front !NULL 。 ( 或 front=rear & front NULL ) (16) 向一个循环队列中插入元素时,首先要判断 队尾指针 ,然后再向指针所指的位置写入新的数据。 (17) 读队首元素的操作 不改变(或不影响) 队列元素的个数。 (18) 设循环队列的容量为 40(序号从 0 到 39) ,现经过一系列的

5、入队和出队运算后,有 front=11,rear=19,则循环队列中还有 8 个元素。 (L= (Nrearfront)% N=(401911)% 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 的值

6、是 a 。 三选择题 (1)队列是限定在( D )进行操作的线性表。 A中间 B队首 C队尾 D端点 (2)队列中的元素个数是( B )。 A不变的 B可变的 C任意的 D0 (3)同一队列内各元素的类型( A )。 A必须一致 B不能一致 C可以不一致 D不限制 (4)队列是一个( C )线性表结构。 A不加限制的 B推广了的 C加了限制的 D非 (5)当利用大小为n的数组顺序存储一个队列时,该队列的最后一个元素的下标为( B )。 An-2 Bn-1 Cn Dn+1 (6)一个循环队列一旦说明,其占用空间的大小( A )。 A已固定 B可以变动 C不能固定 D动态变化 (7)循环队列占用的

7、空间( A )。 A必须连续 B不必连续 C不能连续 D可以不连续 81 (8) 存放循环队列元素的数组data有10个元素, 则data数组的下标范围是( B )。 A0.10 B0.9 C1.9 D1.10 (9)若进队的序列为:A,B,C,D,则出队的序列是( C )。 AB,C,D,A BA,C,B,D CA,B,C,D DC,B,D,A (10)四个元素按:A,B,C,D顺序连续进队Q,则队尾元素是( D )。 A A B B C C D D (11)四个元素按:A,B,C,D顺序连续进队Q,执行一次OutQueue(Q)操作后,队头元素是( B )。 A A B B C C D D

8、 (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); Aa Bb C0 D1 (14)循环队列SQ队满的条件是( B )。 ASQ-rear=SQ-front B(SQ-rear+1)% MAXLEN =SQ-front CSQ-rear=0 DSQ-front=0 (

9、15)设链栈中结点的结构:data为数据域,next为指针域,且top是栈顶指针。若想在链栈的栈顶插入一个由指针s所指的结点,则应执行下列( A )操作。 As-next=top-next;top-next=s; Btop-next=s; Cs-next=top;top=top-next; Ds-next=top;top=s; (16)带头结点的链队列LQ示意图如下,链队列的队头元素是( A ) LQ-front H A B C D LQ-rear AA BB CC DD 82 (17)带头结点的链队列LQ示意图如下,指向链队列的队头指针是( C ) LQ-front H A B C D LQ

10、-rear ALQ-front BLQ-rear CLQ-front-next DLQ-rear-next (18) 带头结点的链队列LQ示意图如下, 在进行进队运算时指针LQ-front ( A ) LQ-front H A B C D LQ-rear A始终不改变 B有时改变 C进队时改变 D出队时改变 (19)队列Q,经过下列运算后,再执行QEmpty(Q) 的值是( C )。 InitQueue(Q) (初始化队列);InQueue(Q,a); InQueue(Q,b);OutQueue(Q,x); ReadQueue(Q,x); Aa Bb C0 D1 (20)若用一个大小为6的数组

11、来实现循环队列,且当前front和rear的值分别为3和0,当从队列中删除一个元素,再加入两个元素后,front和rear的值分别为( B )。 A5和1 B4和2 C2和4 D1和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 (

12、Q, A); 83 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 q

13、u ; 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用一个循环数组Q0.MAXLEN-1表示队列时,该队列只有一个头指针front,不设尾指针,而改置一个记数器count用以记录队列中结点的

14、个数。试编写一个能实现:初始化队列、判队空、读队头元素、入队操作和出队操作的算法。 84 3一个用单链表组成的循环队列,只设一个尾指针rear,不设头指针,请编写他如下算法: (1) 向循环队列中插入一个元素为x的结点; (2) 从循环队列中删除一个结点。 1 解:用一个循环数组Queue0,n-1表示该循环队列,头指针为front,计数器count用来记录队列中结点的个数。 (1)入队算法: void inqueqe(int x) int temp; if (count=n) printf( 队列上溢出n); else count+ temp=(front+count)%n; Queuete

15、mp=x (2)出队算法: int outqueue() int temp; if (count=0) printf( 队列下溢出n); else temp=Queuefront; front=(front+1)%n; count-; return temp; 2解:队列为空:count=0 队列为满:count=MAXLEN 队尾第一个元素位置=(front+count)%MAXLEN 队首第一个元素位置=(front+1)%MAXLEN const MAXLEN=100; int queueMAXLEN; int front,count; / 定义队头和计数器count (1)初始化队列

16、void init() front=1; count=0; 85 (2)判定队空 int QEmpty() if (count=0) return(1); else return(0); (3)读队头元素 void ReadFront(int queue,x) if (count=0) printf( 下溢出n); else front=(front+1)%MAXLEN; x=queuefront; (4)入队操作 void InQueue(int queue,int x) int place; if (count=MAXLEN) printf( 上溢出n); else count+; pla

17、ce=(front+count)%MAXLEN; queueMAXLEN=x; (5)出队操作 void OutQueue(int queue) / 删除队列头元素 if (count=0) printf( 队列下溢出n); else front=(front+1)%MAXLEN; count-; 3 86 (1)解:定义本题队列的结点类型如下: typedef struct linknode int data; struct linknode *next; qu; qu *rear; inqueue(int x) / 向队列插入结点x qu *head, *s; s=(qu *) new q

18、u; / 创建一个新结点 s-data=x; if (rear=NUlL) / 若队空,则建立一个循环队列 rears; rear-nexts; else / 若不为空,则将s插到后面 head=rear-next; rear-nexts; rear=s; / rear始终指向最后一个结点 rear-nexthead; (2)解: void delqueue(rear) if (rear=NULL) printf( 下溢出!n); else head=rear-next; / head指向队首结点 if (head=rear) rear=NULL / 只有个结点则直接删除该结点 else rear-next=head-next / 否则删除第一个结点 delete head; / 释放队首结点

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号