TOJ 数据结构实验--循环队列

描述

创建一个循环队列,队列元素个数为4。能够实现队列的初始化、入队列、出队列、求队列长度等操作。

循环队列数据类型定义如下:

typedef struct
{

    int data[Max];
    int front;
    int rear;
}SqQueue;

部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

int main()
{
    SqQueue q;
    char ss[10]; 
    int x, sta,l; 
    InitQueue(&q); 
    while(scanf("%s", ss)!=EOF) 
    {
        if(strcmp(ss, "enter")==0)
        {
            scanf("%d", &x);
            sta= EnQueue(&q,x);
            if(sta==0)
                printf("FULL\n"); 
        }
        else if(strcmp(ss, "length")==0)
        {
            l=QueueLength(q); 
            printf("%d\n", l);
        }
        else
        {
            sta = DeQueue(&q,&x);
            if(sta==0)
                printf("EMPTY\n"); 
            else
                printf("%d\n", x);
        } 
    }
    return 0;
}

输入

输入数据由以下几种命令组成:

(1)enter x:x入队列

(2)del:出队列

(3)length:求队列长度

每个命令占一行,以EOF结束。

输出 

当执行enter操作时元素入队,若队满输出FULL。

当执行del时输出出队的元素,若队为空,输出EMPTY。

当。执行length时,输出队列长度。

样例输入

 enter 3
enter 15
length
del
del
del

样例输出

2
3
15
EMPTY

#include <stdio.h>
#include <string.h>
#define Max 5
typedef struct

{
    int data[Max];
    int front;
    int rear;
}SqQueue;
int InitQueue(SqQueue *q)
{
    q->front=0;
    q->rear=0;
    return 1;
}
int QueueLength(SqQueue q)
{
    return (q.rear-q.front+Max)%Max;
}
int EnQueue(SqQueue *q,int  x)
{
    if((q->rear+1)%Max==q->front)
        return 0;
    else {
        q->data[q->rear]=x;
        q->rear=(q->rear+1)%Max;
        return 1;
    }
}
int DeQueue(SqQueue *q,int *x)
{
    if((q)->front==(q)->rear)
        return 0;
    else {
        *x=q->data[q->front];
        q->front=(q->front+1)%Max;
        return *x;
    }
}

 

猜你喜欢

转载自www.cnblogs.com/baobao2201128470/p/8911074.html