循环队列

#include <stdio.h>
#include <stdlib.h>
#define N 5

typedef struct Node
{
    int elem[N];
    int front;
    int rear;
}SeqQueue;


int initQueue(SeqQueue *Q);//初始化循环队列

int enterQueue(SeqQueue *Q);//循环队列入队

int deleteQueue(SeqQueue *Q);//循环队列出队

void display(SeqQueue *Q);//循环队列显示

int main(void)
{
    SeqQueue Q;
    int a;
    int b;

    while (1)
    {
         printf("\n************************\n");
         printf("1.InitQueue\n");
         printf("2.EnterQueue\n");
         printf("3.DeleteQueue\n");
         printf("4.DisplayQueue\n");
         printf("5.EXIT\n");
         printf("*************************\n");

         printf("Please input the number of the menu\n");
         scanf("%d",&a);

         switch (a)
         {
         case 1:b = initQueue(&Q);
             if (b == 1)
             {
                 printf("Init Queue Success\n");
             }
             else
             {
                 printf("Init Queue Fial\n");
             }
             break;

         case 2:b = enterQueue(&Q);
             if (b==1)
             {
                 printf("Enter Queue Success\n");
             }
             else
             {
                 printf("Enter Queue Fail\n");
             }
             break;

         case 3:b = deleteQueue(&Q);
             if (b==1)
             {
                 printf("Delete Queue Success\n");
             }
             else
             {
                 printf("Delete Queue Fail\n");
             }
             break;

         case 4:display(&Q);
             break;

         case 5:exit(0);
         default:printf("You input the number of menu is error\n");
             printf("Please input the number again\n");
             break;
         }

    }

}

int initQueue(SeqQueue *Q)
{
    Q->front = Q->rear = 0;//将头指针和尾指针都指向第一个
    return 1;
}

int enterQueue(SeqQueue *Q)
{
    int x;

    if ((Q->rear + 1) % N == Q->front)//尾指针加上一,则追上头指针,表示队列满
        return 0;

    printf("Please  input the figure that you want to add\n");
    scanf("%d",&x);

    Q->elem[Q->rear] = x;
    Q->rear = (Q->rear + 1) % N;//重新设置尾指针
    return 1;
}

int deleteQueue(SeqQueue *Q)
{
    if (Q->front==Q->rear)//如果两个指针相同,表示队列为空
    {
        return 0;
    }

    printf("Delete data success\n");
    printf("The number is %d\n",Q->elem[Q->front]);

    Q->front = (Q->front + 1) % N;//重设头指针

    return 1;
}

void display(SeqQueue *Q)
{
    int i = Q->front;//先将i指向头指针
    while (i!=Q->rear)
    {
        printf("%d\t",Q->elem[i]);
        i = (i + 1) % N;//注意i的更新也要想尾指针那样更新,否则将陷入死循环中,因为i一直增长,而Q->rear循环
    }
    printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值