循环队列的基本操作

2019-08-19  本文已影响0人  mark_x
#include <stdio.h>

#define MAX 6

typedef struct
{
    int data[MAX];
    int front;   // 头指针
    int rear;   // 尾指针
}SqQueue;

void InitQueue(SqQueue *Q)
{
    Q->front = 0;
    Q->rear = 0;
}

int QueueLength(SqQueue Q)
{
    return (Q.rear - Q.front + MAX) % MAX;
}

void EnQueue(SqQueue *Q, int e)
{
    // 判断队列是否已满
    if ((Q->rear +1) % MAX == Q->front)
    {
        printf("队列已满!\n");

    }
    Q->data[Q->rear] = e;  // 在队尾加入新元素
    Q->rear = (Q->rear + 1) % MAX;  // 若到最后则转到数组头部
}

void DeQueue(SqQueue *Q, int *e)
{
    if (Q->front == Q->rear)
    {
        printf("队列为空!\n");
    }
    *e = Q->data[Q->front];
    Q->front = (Q->front + 1) % MAX;
}

int main(void)
{
    // 初始化循环队列
    SqQueue queue;
    InitQueue(&queue);
    
    // 循环队列求队列长度
    int q_length = QueueLength(queue);
    printf("循环队列长度为:%d\n", q_length);
    
    // 循环队列的入队操作
    EnQueue(&queue, 3);
    EnQueue(&queue, 520);
    printf("循环队列长度为:%d\n", QueueLength(queue));
    
    // 循环队列出队操作
    int num;
    DeQueue(&queue, &num);
    printf("出队元素为:%d\n", num);
    DeQueue(&queue, &num);
    printf("出队元素为:%d\n", num);
    
    
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读