C语言数组实现循环队列

//头文件

********************************************数组实现循环队列.h********************************************

//循环队列(数组实现)  
#include <stdlib.h>  
#include <stdio.h>  
#define MAXSIZE 5  
typedef int T;  
typedef struct tag  
{  
    int front, rear, MaxSize, count; //其实MaxSize变量完全可以不要  
    T elements[MAXSIZE];  
} QUEUE;

void creat( QUEUE *queue );  //创建队列   

int is_empty( QUEUE queue);  //其实最好传指针免得栈开销太大 ,判断队列是否为空 

int is_full( QUEUE queue );  //判断队列是否满了 

void readqueue( QUEUE queue ); //读取队列的首元素的值 

void in_queue( QUEUE *queue, T value ); //进队列 

T out_queue( QUEUE *queue );  //出队列 

void print( QUEUE queue );  //输出队列元素 

void creat( QUEUE *queue )  
{  
    queue -> front = 0;  
    queue -> rear = 0;  
    queue -> count = 0;  
    queue -> MaxSize = MAXSIZE - 1;  
}  
int is_empty( QUEUE queue)  //其实最好传指针免得栈开销太大  
{  
    if ( queue.count == 0 )  
    {  
        return 1;  
    }  
    else  
    {  
        return 0;  
    }  
}  
int is_full( QUEUE queue )  
{  
    if ( queue.count == MAXSIZE )  
    {  
        return 1;  
    }  
    else  
    {  
        return 0;  
    }  
}  
void readqueue( QUEUE queue ) //just read the value  
{   
    if ( queue.count == 0 )  //可以用前面的is_empty函数进行判断  
    {  
        printf("the queue is empty! no number is available! /n");  
    }  
    else  
    {  
        printf("the first number is %d /n", queue.elements[queue.front]);  
    }  
}  
void in_queue( QUEUE *queue, T value )  
{  
    if ( queue -> count == MAXSIZE )  //可以利用前面的is_full函数进行判断  
    {  
        printf("sorry! the queue is full! no space is available!/n");  
    }  
    else  
    {  
        if ( queue -> count == 0 )  
        {  
            //主要是处理队列为空时的入队列  
            queue -> elements[queue -> rear] = value;  
            queue -> count += 1;  
        }  
        else  
        {  
            queue -> rear = (queue -> rear + 1) % MAXSIZE;  
            queue -> elements[queue ->rear] = value;  
            queue -> count += 1;  
        }  
    }  
}  
T out_queue( QUEUE *queue )  
{  
    if ( queue -> count == 0 )  //可以利用前面的is_empty函数进行判断  
    {  
        printf("sorry! the queue is empty! no number is available! /n");  
        exit(EXIT_FAILURE);  
    }  
    else  
    {  
        queue -> front = (queue -> front + 1) % MAXSIZE;  
        queue -> count -= 1;    
    }  
}  
//print queue  
void print( QUEUE queue )  
{  
    int i = 1/*, count*/;  
    if ( queue.count == 0 )  
    {  
        printf("the queue is empty! no number can be printed! \n");  
    }  
    else  
    {  
        //count = queue.count;  
        printf("the number of queue is %d \n", queue.count);  
        for ( i; i <= queue.count; i++ )  
        {  
            printf("the %d number is %d \n", i, queue.elements[(queue.front + i - 1) % MAXSIZE]);  
            //printf("the %d number is %d \n", i, queue.elements[queue.front + i - 1]);  
        }  
    }  
}  
//test functions  



************************************************************主函数********************************************************

#include<stdio.h>
#include"数组实现循环队列.h" 
int main()  
{  
    QUEUE queue;  
    creat(&queue);  
    //out_queue(&queue);  
    in_queue(&queue, 2);  
    print(queue);  
    in_queue(&queue, 4);  
    print(queue);  
    in_queue(&queue, 5);  
    print(queue);  
    in_queue(&queue, 6);  
    print(queue);  
    in_queue(&queue, 1);  
    print(queue);  
    out_queue(&queue);  
    print(queue);  
    in_queue(&queue, 9);  
    print(queue);  
    //out_queue(&queue);  
    //print(queue);  
    in_queue(&queue, 7);  
    //print(queue);  
}  



  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值