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