循环队列

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define MAX_SZ 10

typedef char data_type;

typedef struct
{
    data_type * data_array;  //定义指向存储数据的空间的指针
    int rear; //标记队尾,标记的空间是空闲的
    int head; //标记对首
}QueueType,*QueuePtr;

/****************************************************************

*队列初始化

****************************************************************/

void QueueInit(QueueType &Q)
{
    if((Q.data_array=(data_type *)malloc(MAX_SZ*sizeof(data_type)))!=NULL)
    {
        Q.rear=0;
        Q.head=0;
    }
    else
        printf("内存分配异常!\n");
}


/***********************************************************

*取队首数据

***********************************************************/

int Delete(QueueType &Q)
{
    if(Q.head!=Q.rear)    //如果不为空
    {
        printf("%c",Q.data_array[Q.head]);
        Q.head=(Q.head+1)%MAX_SZ;
        return 1;
    }
    else
        return -1;
}

/*****************************************************

*

*从队尾插入数据

*如果已满就删除队首数据

*

*****************************************************/

void Insert(QueueType &Q,data_type e)
{
    if(((Q.rear+1)%MAX_SZ)==Q.head)   //如果已满
    {
        Delete(Q);
    }
    Q.data_array[Q.rear] = e;
    Q.rear = (Q.rear+1)%MAX_SZ;
}


int main()
{


    data_type e;
    QueueType Q;
    QueueInit(Q);

    while((e=getchar())!=0x0a) //回车结束输入
        Insert(Q,e);
    while(1==Delete(Q)); //取数据,直至取完
    return 0;

}

运行结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值