1652: 队列-基本操作(链式存储,不建议学生做)
金币值:2
定数:11
时间限制:1.000 s
内存限制:128 M
正确:3
提交:3
正确率:100.00% 命题人:
题目描述
#请补充完整下列函数,注意不要修改其它代码。 #include <stdlib.h> #include <stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */ typedef struct QNode { /* 结点结构 */ QElemType data; struct QNode *next; } QNode,*QueuePtr; typedef struct { /* 队列的链表结构 */ QueuePtr front,rear; /* 队头、队尾指针 */ } linkQueue; Status visit(QElemType c) { printf("%d ",c); return OK; } /* 构造一个空队列Q,带有头结点 */ Status InitQueue(linkQueue &Q) { _________ return OK; } /* 销毁队列Q */ Status DestroyQueue(linkQueue &Q) { _________ return OK; } /* 将Q清为空队列 */ Status ClearQueue(linkQueue &Q) { QueuePtr p,q; __________ return OK; } /* 若Q为空队列,则返回TRUE,否则返回FALSE */ Status QueueEmpty(linkQueue Q) { _________ } /* 求队列的长度 */ int QueueLength(linkQueue Q) { ________ } /* 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR */ Status GetHead(linkQueue Q,QElemType &e) { if(QueueEmpty(Q)) return ERROR; _________; return OK; } /* 插入元素e为Q的新的队尾元素 */ Status EnQueue(linkQueue &Q,QElemType e) { QueuePtr s=(QueuePtr)malloc(sizeof(QNode)); if(!s) /* 存储分配失败 */ return ERROR; _________ return OK; } /* 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR */ Status DeQueue(linkQueue &Q,QElemType &e) { QueuePtr p; if(QueueEmpty(Q)) return ERROR; _________ return OK; } /* 从队头到队尾依次对队列Q中每个元素输出 */ Status QueueTraverse(linkQueue Q) { QueuePtr p; p=Q.front->next; while(p) { _______ } printf("\n"); return OK; } int main(void) { int i,n; QElemType d; linkQueue q; i=InitQueue(q); if(i) printf("成功地构造了一个空队列!\n"); printf("是否空队列?%d(1:空 0:否)\n",QueueEmpty(q)); printf("队列的长度为%d\n",QueueLength(q)); scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%d",&d); EnQueue(q,d); } printf("插入%d个元素后,队列的长度为%d\n",n,QueueLength(q)); printf("是否空队列?%d(1:空 0:否)\n",QueueEmpty(q)); printf("队列的元素依次为:"); QueueTraverse(q); i=GetHead(q,d); if(i==OK) printf("队头元素是:%d\n",d); DeQueue(q,d); printf("删除了队头元素%d\n",d); i=GetHead(q,d); if(i==OK) printf("新的队头元素是:%d\n",d); ClearQueue(q); printf("清空队列后,q.front->next=%u\n",q.front->next); DestroyQueue(q); printf("销毁队列后,q.front=%u q.rear=%u\n",q.front, q.rear); return 0; }
输入格式
共2行:
第1行:待入队列元素个数n
第2行:n个元素,以空格间隔
第1行:待入队列元素个数n
第2行:n个元素,以空格间隔
输出格式
见样例
输入样例 复制
3
-5 5 10
输出样例 复制
成功地构造了一个空队列!
是否空队列?1(1:空 0:否)
队列的长度为0
插入3个元素后,队列的长度为3
是否空队列?0(1:空 0:否)
队列的元素依次为:-5 5 10
队头元素是:-5
删除了队头元素-5
新的队头元素是:5
清空队列后,q.front->next=0
销毁队列后,q.front=0 q.rear=0