码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构--循环队列

时间:2018-04-24 18:55:32      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:gif   struct   play   src   isp   img   bottom   队列   return   

技术分享图片
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define Max 5
typedef struct SqQueue{
    int *base; //动态开辟内存  
    int front; //头指针 
    int rear;  //尾指针 
}SqQueue;

int InitQueue(SqQueue *q){
    q->base=(int *)malloc(Max*sizeof(int));  
    if(!q->base) return 0;  //存储分配失败 
    q->front=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;  //队满 
    q->base[q->rear]=x;
    q->rear=(q->rear+1)%Max;
    return 1;
}

int DeQueue(SqQueue *q,int *x){  //从队首出队 
    if(q->front==q->rear) return 0;
    *x=q->base[q->front];
    q->front=(q->front+1)%Max;
    return 1;
}
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;
}
View Code

 

描述

 

创建一个循环队列,队列元素个数为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>
#include<stdlib.h>
#include<math.h>
#define Max 5
typedef struct SqQueue{
    int *base; //动态开辟内存  
    int front; //头指针 
    int rear;  //尾指针 
}SqQueue;

int InitQueue(SqQueue *q){
    q->base=(int *)malloc(Max*sizeof(int));  
    if(!q->base) return 0;  //存储分配失败 
    q->front=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;  //队满 
    q->base[q->rear]=x;
    q->rear=(q->rear+1)%Max;
    return 1;
}

int DeQueue(SqQueue *q,int *x){  //从队首出队 
    if(q->front==q->rear) return 0;
    *x=q->base[q->front];
    q->front=(q->front+1)%Max;
    return 1;
}
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;
}
View Code

 

数据结构--循环队列

标签:gif   struct   play   src   isp   img   bottom   队列   return   

原文地址:https://www.cnblogs.com/momo-88/p/8932455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!