队列的实现(C语言)

队列的原理:

先进先出原则!

1、限定只允许在表的一端插入,另一端删除,具有先进先出特点的线性表

2、队尾:允许插入的一端 

3、队头:允计删除的一端

4、应用:凡是对数据的处理具有“先进先出”的特点,都可以用队列这种数据结构来操作

5、无论栈还是队列,都具有缓存数据的作用,只是跟据实际存取需要,来选择哪种线性结构

demo:用链表实现队列!
/* ************************************************************************
*       Filename:  queue.c
*    Description:  
*        Version:  1.0
*        Created:  2018年03月22日 21时50分52秒
*       Revision:  none
*       Compiler:  gcc
*         Author:  YOUR NAME (),
*        Company:  
* ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

struct Link
{
        int data;
        struct Link* next;
};

struct Queue
{
        struct Link* front;
        struct Link* rear;
        int size;
};

void QueueInit(struct Queue* queue)
{
        queue->front = NULL;
        queue->rear = NULL;
        queue->size = 0;
}

int QueueEmpty(struct Queue* queue)
{
        return (queue->size == 0);
}

void QueuePush(struct Queue* queue, const int data)
{
        struct Link* node;
        node = (struct Link*)malloc(sizeof(struct Link));
        assert(node != NULL);
        
        node->data = data;
        node->next = NULL;
        
        if(QueueEmpty(queue))
        {
            queue->front = node;
            queue->rear = node;
        }
        else
        {            
            queue->rear->next = node;
            queue->rear = node;
        }
        ++queue->size;
}

int QueuePop(struct Queue* queue, int* data)
{
        if (QueueEmpty(queue))
        {
                return 0;
        }
        struct Link* tmp = queue->front;
        *data = queue->front->data;
        queue->front = queue->front->next;
        free(tmp);
        --queue->size;

        return 1;
}

void QueueDestroy(struct Queue* queue)
{
     struct Link* tmp;
     while(queue->front)
     {
         tmp = queue->front;
         queue->front = queue->front->next;
         free(tmp);
     }
}

int main(void)
{
        struct Queue queue;
        QueueInit(&queue);
        int i;
        for (i=0; i<5; i++)
        {
                QueuePush(&queue, i);
        }
        while (!QueueEmpty(&queue))
        {
                QueuePop(&queue, &i);
                printf("%d ", i);
        }

        printf("\n");

        return 0;
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值