C 语言实现队列

Queue.h

typedef int QDataType;
typedef struct QNode 
{
    QDataType _data;
    struct QNode *_next;
}QNode;

typedef struct Queue 
{
    QNode *_front;
    QNode *_rear;
}Queue;

void QueueInit(Queue *q);
void QueueDestroy(Queue *q);
static QNode *CreateNode(QDataType data);
void QueuePush(Queue *q, QDataType data);
void QueuePop(Queue *q);
QDataType QueueFront(Queue *q);
int QueueEmpty(const Queue *q);
int QueueSize(const Queue *q);

Queue.c

#include "Queue.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

void QueueInit(Queue *q)
{
    q->_front = q->_rear = NULL;
}

void QueueDestroy(Queue *q)
{
    QNode *cur;
    QNode *next = NULL;
    for (cur = q->_front; cur != NULL; cur = next)
    {
        next = cur->_next;
        free(cur);
    }
    q->_front = q->_rear = NULL;
}

static QNode *CreateNode(QDataType data)
{
    QNode *node = (QNode *)malloc(sizeof(QNode));
    assert(node);
    node->_data = data;
    node->_next = NULL;
    return node;
}

void QueuePush(Queue *q, QDataType data)
{
    QNode *newNode = CreateNode(data);
    if (NULL == q->_front)
    {
        q->_front = q->_rear = newNode;
        return;
    }
    q->_rear->_next = newNode;
    q->_rear = newNode;
}

void QueuePop(Queue *q)
{
    assert(q != NULL);
    if (NULL == q->_front)
    {
        printf("队列为空!!!\n");
        return;
    }

    QNode *del = q->_front;
    q->_front = q->_front->_next;
    free(del);
    if (NULL == q->_front)
    {
        q->_rear = NULL;
    }
}

QDataType QueueFront(Queue *q)
{
    assert(q != NULL);
    if (NULL == q->_front)
    {
        printf("队列为空!!!\n");
        return -1;
    }
    return q->_front->_data;
}

int QueueEmpty(const Queue *q)
{
    return q->_front == NULL;
}

int QueueSize(const Queue *q)
{
    QNode *cur;
    int size = 0;
    for (cur = q->_front; cur != NULL; cur = cur->_next)
    {
        size++;
    }
    return size;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值