SHAOXIAOJ正在加载中...

1652: 队列-基本操作(链式存储,不建议学生做)

金币值:2 定数:11 时间限制:1.000 s 内存限制:128 M
正确:3 提交:3 正确率:100.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 数据结构-栈与队列

题目描述

#请补充完整下列函数,注意不要修改其它代码。
#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个元素,以空格间隔

输出格式

见样例

输入样例    复制

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