循环队列

来源:互联网 发布:linux 司机售票员问题 编辑:程序博客网 时间:2024/06/05 06:56
#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 0
原创粉丝点击