C语言数据结构之循环队列

#include <stdio.h>
#define MAX 5
typedef struct
{
    int QueueCache[MAX];
    int front;
    int rear;
}Queue;


Queue *initQueue(Queue *q)
{
    q->front=0;
    q->rear=0;
    return q;
}
int IsFull(Queue *q)
{
    if((q->front+1)%MAX==q->rear)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int IsEmpty(Queue *q)
{
    if(q->front==q->rear)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}


int InsertElement(Queue *q,int element)
{
    if(IsFull(q))
    {
        return -1;
    }
    else
    {
        q->QueueCache[q->front]=element;
        q->front=(q->front+1)%MAX;
        return 0;
    }
}
int DeleElement(Queue *q,int *element)
{
    if(IsEmpty(q))
    {
        return -1;
    }else
    {
         *element = q->QueueCache[q->rear];
         q->rear=(q->rear+1)%MAX;
         return 0;
    }
}
int main()
{
    Queue *q;
    int element=0;
    q = (Queue *)malloc(sizeof(Queue));
    q=initQueue(q);
    for(int i=0;i<10;i++)
    {
        if(InsertElement(q,i)==-1)
        {
            break;
        }
    }
    for(int i=0;i<2;i++)
    {
        if(DeleElement(q,&element)==-1)
        {
            printf("Empty\n");
        }else
        {
            printf("%d\n",element);
        }
    }
    printf("insert a element\n");
    if(InsertElement(q,45)==-1)
    {
        printf("Full\n");
    }
    if(InsertElement(q,56)==-1)
    {
        printf("Full\n");
    }
    for(int i=0;i<4;i++)
    {
        if(DeleElement(q,&element)==-1)
        {
            printf("Empty\n");
        }else
        {
            printf("%d\n",element);
        }
    }


    free(q);
}
用程序简单模拟一个单队列多窗口的排队模式: 设某银行有一个固定能容纳N个顾客的等候区,顾客想进银行,若等候区有空则可进,否则被拒绝进入。每当银行柜员叫号时,等候区中最先进入的顾客离开等候区前往柜台办理业务,若叫号时等候区无人,则此次叫号作废。 1.输入格式 第一行输入一个不大于20的正整数N,表示银行等候区能容纳的人数,接下来用若干行表示依时间顺序先后发生的“顾客想进银行”或“叫号”事件,格式分别是:  顾客想进银行,用 In <id> 表示,其中<id>是顾客编号,为不大于100000的正整数;  叫号,用Calling表示。 最后一行是一个#符号,表示输入结束。 注意:  题目输入保证每个顾客的编号是独一无二的,即:不会出现想进银行的顾客与已经在等候区的顾客编号相同的情况。  保证后一个事件一定在前一个事件完成之后才发生,即:不需要考虑事件之间的“同步”问题。 2.输出格式 对于输入的每个事件,按同样顺序在一行内输出事件的结果,格式分别是:  顾客想进银行,若顾客进入,则输出 <id> joined. Total:<t> 其中<id>是该顾客的编号,<t>是顾客进入后,等候区的人数  顾客想进银行,若因等候区满而被拒绝,则输出<id> rejected. 其中<id>是该顾客的编号  叫号,若有顾客前往柜台,则输出 <id> called. Total:<t> 其中<id>是该顾客的编号,<t>是顾客去柜台后,等候区的人数  叫号,等候区无人,则输出 No one! 这个是大学初学数据结构所做的一次作业任务,里面还有非常多可以优化的地方。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值