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

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

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

#include 
#include 

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;
}

程序的运行结果:

数据结构 队列入队,出队编程的例子_第1张图片

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

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


你可能感兴趣的:(数据结构)