鱼C论坛

 找回密码
 立即注册

静态循环队列

已有 518 次阅读2013-9-12 23:53 |个人分类:数据结构

//静态循环队列
#include <stdio.h>
#include <malloc.h>

#define Len 6     //队列长度

typedef struct Queue
{
    int * pBase;
    int front;
    int rear;

}QUEUE;

void init(QUEUE *);     //初始化队列
bool full_queue(QUEUE *);   //判断队列是否满
bool en_queue(QUEUE *,int);     //入队
void traverse_queue(QUEUE *);   //遍历输出队列元素
bool empty_queue(QUEUE *);      //判断队列是否空
bool out_queue(QUEUE *,int *);  //出队

int main()
{
    QUEUE Q;
    int val;

    init(&Q);

    en_queue(&Q,1);
    en_queue(&Q,2);
    en_queue(&Q,3);
    en_queue(&Q,4);
    en_queue(&Q,5);
    en_queue(&Q,6);
    en_queue(&Q,7);

    traverse_queue(&Q);

    if(out_queue(&Q,&val))
        printf("出队成功,%d出队\n",val);
    else
        printf("出队失败!\n");

    traverse_queue(&Q);

    return 0;
}

void init(QUEUE * pQ)
{
    pQ->pBase = (int *)malloc(sizeof(int) * Len);
    pQ->front = 0;
    pQ->rear = 0;
}

bool full_queue(QUEUE * pQ)
{
    if((pQ->rear+1) % Len == pQ->front)
        return true;
    else
        return false;
}

bool en_queue(QUEUE * pQ,int val)
{
    if(full_queue(pQ))
        return false;
    else
    {
        pQ->pBase[pQ->rear] = val;
        pQ->rear = (pQ->rear+1) % Len;
        return true;
    }
}

void traverse_queue(QUEUE * pQ)
{
    int i = pQ->front;

    while(i != pQ->rear)
    {
        printf("%d ",pQ->pBase[i]);
        i = (i+1) % Len;
    }
    printf("\n");
}

bool empty_queue(QUEUE * pQ)
{
    if(pQ->front == pQ->rear)
        return true;
    else
        return false;
}

bool out_queue(QUEUE * pQ,int * pVal)
{
    if(empty_queue(pQ))
        return false;
    else
    {
        *pVal = pQ->pBase[pQ->front];
        pQ->front = (pQ->front+1) % Len;
        return true;
    }
}

 


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 21:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部