数据结构 队列入队,出队编程的例子

队列是先入先出的,即先入队的数据先出队

下面这个程序具有入队,出队,遍历队列数据的功能

#include <stdio.h>
#include <malloc.h>

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

}QUEUE;

//初始化静态队列,创建能够存储5个数据的静态队列
void Init_queue(QUEUE* _pQ)
{
    _pQ->pBase = (int *)malloc(sizeof(int)*6);
    _pQ->front = 0;
    _pQ->rear = 0;
}

//判断此队列是否为满
int full_queue(QUEUE *_pQ)
{
    if(_pQ->front == (_pQ->rear+1)%6)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

//入队
int en_queue(QUEUE* _pQ, int _iVal)
{
    if(0 == full_queue(_pQ))
    {
        printf("----input %d fail, because queue is full\n", _iVal);
        return -1;
    }
    else
    {
        _pQ->pBase[_pQ->rear] = _iVal;
        _pQ->rear = (_pQ->rear + 1)%6;
        return 0;
    } 
}

//对队列进行遍历
int traverse_queue(QUEUE* _pQ)
{
    int i = _pQ->front;
    while(i  != _pQ->rear)
    {
        printf("%d ", _pQ->pBase[i]);
        i = (i+1)%6;
    }

    printf("\n");
    return 0;
}

//判断队列是否为空
int empty_queue(QUEUE* _pQ)
{
    if(_pQ->front == _pQ->rear)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

//队列出站
int out_queue(QUEUE* _pQ, int* _piVal)
{
    if(0 == empty_queue(_pQ))
    {
        printf("----This queue is empty\n");
        return -1;
    }
    else
    {
        *_piVal = _pQ->pBase[_pQ->front];
        _pQ->front = (_pQ->front + 1)%6;
    }

    return 0;    
}

int main()
{
    int iVal = 0;
    QUEUE Queue;
    Init_queue(&Queue);
    en_queue(&Queue, 1);
    en_queue(&Queue, 2);
    en_queue(&Queue, 3);
    en_queue(&Queue, 4);
    en_queue(&Queue, 5);
    en_queue(&Queue, 6);
    en_queue(&Queue, 7);
    traverse_queue(&Queue);

    if(0 == out_queue(&Queue, &iVal))
    {
        printf("----Out data is %d\n", iVal);
    }

    traverse_queue(&Queue);
    return 0;
}

程序的运行结果:

此程序是能够存放5个数据的静态队列,可以看到1-5已经入队,而数据6和数据7没有入队,因为队空间已满。

在队列中删除元素,即出队,可以看到先入队的1被删除,即说明了先入队的先出队,并且是从队首进行出队。


  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值