循环队列(数据结构)

来源:互联网 发布:澳大利亚外卖软件 编辑:程序博客网 时间:2024/05/19 09:17

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

#include <stdio.h>#include <stdlib.h>#include <assert.h>#define QueueSize 5#define OK 1typedef 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;}


原创粉丝点击