美文网首页
循环队列结构(C语言)

循环队列结构(C语言)

作者: 你好667 | 来源:发表于2017-08-25 10:23 被阅读0次
# include <stdio.h>
# include <malloc.h>

//队列的特点是 =》先进先出
//所以 出列是从头元素出列
//     入列的从尾元素入列

typedef struct Queue
{
    int * pBase;
    int front;      //出列 (队列头元素)
    int rear;       //入列  (队列尾元素)
}QUEUE,* pQUEUE;

//初始化队列
void init(pQUEUE pQ);
//是否满的
bool is_full(pQUEUE pQ);
//入列
bool en_queue(pQUEUE pQ,int val);
//输出队列元素
void traverse(pQUEUE pQ);
//是否空格
bool is_empty(pQUEUE pQ);
//出列
bool out_queue(pQUEUE pQ,int * pVal);


int main(void)
{
    Queue Q;

    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(&Q);
    
    int val;
    if(out_queue(&Q,&val)){
        printf("出列成功 %d \n", val);
    }

    traverse(&Q);

    return 0;
}

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

bool is_full(pQUEUE pQ)
{
    if((pQ->rear+1) % 6 == pQ->front)   //不超过一圈||超过则表示已经满了
        return true;
    else 
        return false;
}

bool en_queue(pQUEUE pQ,int val)        //入列数组尾元素入列
{
    if( is_full(pQ) ){
        return false;
    }else{

        pQ->pBase[pQ->rear] = val;      //规定,入列时尾指针+1
        pQ->rear = (pQ->rear+1) % 6;    //循环队列  (数组指向下一个)|| 范围只能在数组的大小之间,形成一个臆想的环状结构 || 当超过6则满

        return true;
    }
}

void traverse(pQUEUE pQ)
{
    int i = pQ->front;

    while(i != pQ->rear)    //只要不相等,就说明还有元素未输出
    {
        printf("%d ",pQ->pBase[i]);
        i = (i+1) % 6;      //在一个循环内
    }
    printf("\n");
}

bool is_empty(pQUEUE pQ)
{
    if(pQ->front == pQ->rear){
        return true;
    }else{
        return false;
    }
}

bool out_queue(pQUEUE pQ, int * pVal)       //出列数组头元素出列
{
    if(is_empty(pQ)){
        return false;
    }else{
        *pVal = pQ->pBase[pQ->front];       //规定,出列时头指针+1
        pQ->front = (pQ->front+1) % 6;
    }
}

相关文章

网友评论

      本文标题:循环队列结构(C语言)

      本文链接:https://www.haomeiwen.com/subject/xwqudxtx.html