作者 唐艳琴
单位 中国人民解放军陆军工程大学
给定一个初始为空的队(队存储空间长度为10)和一系列进队、出队操作,请编写程序输出经过这些操作后队中的元素。队中元素值均为整数。(采用循环队列完成,禁用一个空间方法)
输入格式:
输入第1行为1个正整数n,表示操作个数;
第2行为给出的n个整数,非0元素表示进队,且此非0值即为进队元素,0元素表示出队。
输出格式:
第一行按出队顺序输出所有出队元素,以一个空格隔开;如果队空时做出队操作会输出"EMPTY",如果队满时做进队操作会输出"FULL"。
第二行中输出队中所有元素,以一个空格隔开。
末尾均有一个空格。
输入样例:
12
3 1 2 0 0 -1 0 0 0 4 5 0
输出样例:
3 1 2 -1 EMPTY 4
5
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码:
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;
typedef struct QNode* PtrToQNode;
struct QNode {
ElementType* data;
int front, rear;
int MaxSize;
};
typedef PtrToQNode Queue;
Queue CreatQueue(int MaxSize);
void insert(Queue Q, ElementType X);
void Delete(Queue Q);
int main(void)
{
int n, num[20];
scanf("%d", &n);
getchar();
for (int i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
int MaxSize = 10;
Queue Q = CreatQueue(MaxSize);
for (int i = 0; i < n; i++)
{
if (num[i] == 0)
{
Delete(Q);
}
else {
insert(Q, num[i]);
}
}
printf("\n");
while (!(Q->rear == Q->front))
{
Delete(Q);
}
return 0;
}
Queue CreatQueue(int MaxSize)
{
Queue Q = (Queue)malloc(sizeof(struct QNode));
Q->data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
Q->front = Q->rear=0;
Q->MaxSize = MaxSize;
return Q;
}
void insert(Queue Q, ElementType X)
{
if ((Q->rear + 1) % (Q->MaxSize) == Q->front)
{
printf("FULL ");
}
else {
Q->rear = (Q->rear + 1) % Q->MaxSize;
Q->data[Q->rear] = X;
}
}
void Delete(Queue Q)
{
if ((Q->rear == Q->front))
{
printf("EMPTY ");
}
else {
Q->front = (Q->front + 1) % Q->MaxSize;
printf("%d ",Q->data[Q->front]);
}
}