7-1 队的基本操作

文章描述了一种使用循环队列实现的程序,该程序处理一系列的进队和出队操作。在队列空间长度为10的情况下,程序接收输入的指令,当执行出队操作时,若队列为空则输出EMPTY,满则输出FULL。最终,程序按出队顺序输出所有元素并显示当前队内元素。
摘要由CSDN通过智能技术生成

作者 唐艳琴

单位 中国人民解放军陆军工程大学

给定一个初始为空的队(队存储空间长度为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]);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值