C语言-数据结构-静态队列2-使用tag标记队满或者队空

/*
2018/8/9
本程序使用dev++编写,C语言
顺序队列tag使用,标记队满还是队空
重点在定义结构体和新建队列函数

注意区别满队时和空队时的情况分析
注意traverse时队满的情况处理

抛砖引玉,希望读者有所收获
*/

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "stdbool.h"

#define MAX_SIZE 5

typedef struct Queue{
    int data[MAX_SIZE];
    int tag;
    int rear, front;
}*PQueue,Queue;

//函数声明
PQueue CreateQueue(void);  //创建新队列
void QueuePush(PQueue Q, int val); //入队 
void QueuePop(PQueue Q, int *val); //出队 
void QueueTraverse(PQueue Q);  //遍历 

int main()
{
    PQueue Q = CreateQueue();
    int val,i;

    QueueTraverse(Q);

    QueuePush( Q, 29);
    QueuePush( Q, 34);
    QueuePush( Q, 25);
    QueueTraverse(Q);

    QueuePop(Q,&val);   
    QueueTraverse(Q);

    QueuePush( Q, 25);
    QueueTraverse(Q);

    QueuePop(Q,&val);   
    QueueTraverse(Q);   

    printf("\nHello world!!\n");
    return;
}



/* 初始化带标志的队列 */
PQueue CreateQueue(void)
{
    PQueue Q = (PQueue)malloc(sizeof(Queue));
    Q->front = 0;
    Q->rear = 0;
    Q->tag = 0;
    return Q;
}

/*压队列*/
void QueuePush(PQueue Q, int val)
{
    if((Q->tag == 1) && (Q->front==Q->rear) ) //判断满 
    {
        printf("队列满队,请处理数据后在入队!\n");return;
    }

    Q->data[Q->rear] = val;
    Q->rear = ++Q->rear % MAX_SIZE; 
    Q->tag = 1;
    return;
} 

/*出队列*/
void QueuePop(PQueue Q, int *val)
{
    if(Q->tag ==0 && Q->front==Q->rear ) //判断空 
    {
        printf("队列空队,请添加数据后在出队!\n");return;
    }
    *val = Q->data[Q->front]; 
    printf("开始出队-val=%d!\n",*val);
    Q->front = ++Q->front % MAX_SIZE;
    Q->tag = 0; 
    return;
}

/*遍历队列*/
void QueueTraverse(PQueue Q)
{
    if(Q->tag == 0 && Q->front==Q->rear)  //空队列 
    {
        printf("队列空队,请添加数据后在traverse!\n");return;
    }

    int front = Q->front;

    printf("%d ",Q->data[front]);  // 防止front与rear相等时,无法进入下面的循环 
    front = ++front % MAX_SIZE;

    while( front != Q->rear)
    {
        printf("%d ",Q->data[front]);
        front = ++front % MAX_SIZE;     
    }
    printf("\n");
    return; 
} 

猜你喜欢

转载自blog.csdn.net/qq_32460819/article/details/81539205