循环队列(数据结构)

一年前学的数据结构都忘得差不多了,想重温一下....

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

#define QueueSize 5
#define OK 1

typedef char DataType;
typedef int Status;

typedef struct Queue
{
    DataType data[QueueSize];
    int front;
    int rear;
}CirQueue;

Status InitQueue(CirQueue *Q)
{
    Q->front = 0;
    Q->rear = 0;
    return OK;
}

Status QueueEmpty(CirQueue *Q)
{
    return Q->front==Q->rear;
}

Status QueueFull(CirQueue *Q)
{
    return (Q->rear+1)%QueueSize==Q->front;
}

Status EnQueue(CirQueue *Q, DataType c)
{
    assert(!QueueFull(Q));
    Q->data[Q->rear] = c;
    Q->rear = (Q->rear+1)%QueueSize;
    return OK;
}

DataType DeQueue(CirQueue *Q)
{
    assert(!QueueEmpty(Q));
    DataType val = Q->data[Q->front];
    Q->front = (Q->front+1)%QueueSize;
    return val;
}

DataType GetHead(CirQueue *Q)
{
    assert(!QueueEmpty(Q));
    return Q->data[Q->front];
}

Status ClearQueue(CirQueue *Q)
{
    Q->front = 0;
    Q->rear = 0;
    return OK;
}

int QueueLength(CirQueue *Q)
{
    return (Q->rear-Q->front+QueueSize)%QueueSize;
}

int main()
{
    CirQueue queue;
    InitQueue(&queue);
    if(QueueEmpty(&queue))
    {
	EnQueue(&queue, 'A');
        EnQueue(&queue, 'R');
        EnQueue(&queue, 'E'); 
	EnQueue(&queue, 'T');
	//空出一个了元素位置以区别满队列 与空队列 
	//EnQueue(&queue, 'Y');
    }
    if(QueueFull(&queue))
    {
        printf("QueueLength = %d\n", QueueLength(&queue));
        printf("TopHead = %c\n", GetHead(&queue));
        printf("DeQueue = %c\n", DeQueue(&queue));
	printf("DeQueue = %c\n", DeQueue(&queue));
	printf("DeQueue = %c\n", DeQueue(&queue));
	printf("TopHead = %c\n", GetHead(&queue));
	printf("DeQueue = %c\n", DeQueue(&queue));
    }
    else
    {
	printf("QueueLength = %d\n", QueueLength(&queue));
    }
    if(ClearQueue(&queue))
	printf("QueueLength = %d\n", QueueLength(&queue));
	
    system("pause");
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值