题解 | #【模板】循环队列#

【模板】循环队列

https://www.nowcoder.com/practice/0a3a216e50004d8bb5da43ad38bcfcbf

#include <stdio.h>
#include<string.h>

typedef struct Queue QU;
struct Queue
{
    int hand;
    int back;
};
//初始化
void Initialization(QU* qu)
{
    qu->hand = -1;
    qu->back = 0;
}
//加入元素
void Push(QU* qu, int num,int n,int *arr)
{
    if (n == 1)//栈的空间为1时
    {
        if ((qu->hand != qu->back) && (qu->hand != -1) && ((qu->back) % n == (qu->hand) % n))//判断栈是否为满
        {
            printf("full\n");
            return;
        }
    }
    else//栈的空间不为为1时
    {
        if ((qu->hand != qu->back) && ((qu->back) % n == (qu->hand) % n))//判断栈是否为满
        {
            printf("full\n");
            return;
        }
    }
    if (qu->hand == -1)
    {
        qu->hand = 0;
    }
    arr[(qu->back) % n] = num;
    qu->back++;
}
//删除元素
void Pop(QU* qu,int n,int *arr)
{
    if (qu->hand == qu->back||qu->hand==-1)
    {
        printf("empty\n");
        return;
    }
    else
    {
        printf("%d\n", arr[(qu->hand)%n]);
        qu->hand++;
    }
}
void Front(QU* qu,int n,int *arr)
{
    if (qu->hand == qu->back||qu->hand==-1)
    {
        printf("empty\n");
        return;
    }
    else
    {
        printf("%d\n", arr[(qu->hand)%n]);
    }
}
int main()
{
    int n = 0;
    int q = 0;
    scanf("%d %d", &n,&q);
    QU qu;
    Initialization(&qu);
    int arr[n];
    for (int i = 0; i < q; i++)
    {
        int num = 0;
        char charr[6];
        scanf("%s", charr);
        if (!strcmp(charr, "push"))
        {
            scanf("%d", &num);
            Push(&qu, num,n,arr);
        }
        else if (!strcmp(charr, "pop"))
        {
            Pop(&qu,n,arr);
        }
        else if (!strcmp(charr, "front"))
        {
            Front(&qu,n,arr);
        }
    }
    return 0;
}

全部评论

相关推荐

深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务