数据结构队列(链式实现)

代码实现:

#include <stdio.h>

#include <stdlib.h>
typedef int DataType;
typedef struct qnode
{
    DataType data;
    struct qnode *next;
}LQNode;
typedef struct
{
    LQNode *front;
    LQNode *rear;
}LQueue;
void QueueInitiate(LQueue *Q)
{
    Q->front = NULL;
    Q->rear = NULL;
}
int QueueNotEmpty(LQueue *Q)
{
    if(Q->front == NULL)
    {
        return 0;
    }
    return 1;
}
int QueueAppend(LQueue *Q, DataType x)
{
    LQNode *p;
    if((p = (LQNode *)malloc(sizeof(LQNode))) == NULL)
    {
        printf("内存空间不足!");
        return 0;
    }
    p->data = x;
    p->next = NULL;
    if(Q->rear != NULL)
    {
        Q->rear->next = p;
    }
    Q->rear = p;
    if(Q->front == NULL)
    {
        Q->front = p;
    }
    return 1;
}

int QueueDelete(LQueue *Q, DataType *d)
{
    LQNode *p;
    if(Q->front == NULL)
    {
        printf("队列空,无数据元素出队列!\n");
    }
    else
    {
        *d = Q->front->data;
        p = Q->front;
        Q->front = Q->front->next;
        if(Q->front == NULL)
        {
            Q->rear = NULL;
        }
        free(p);
    }
    return 1;
}
int QueueGet(LQueue *Q, DataType *d)
{
    if(Q->front == NULL)
    {
        printf("队列已空无数据元素出队列!");
        return 0;
    }
    else
    {
        *d = Q->front->data;
        return 1;
    }
}
void Destroy(LQueue Q)
{
    LQNode *p, *p1;
    p = Q->front;
    while(p!=NULL)
    {
        p1 = p;
        p = p->next;
        free(p1);
    }
}
int main()
{
    LQueue *queue;
    queue = (LQueue *)malloc(sizeof(LQueue));
    QueueInitiate(queue);
    QueueAppend(queue, 1);
    QueueAppend(queue, 2);
    QueueAppend(queue, 3);
    DataType *d1, *d2;
    d1 = (DataType *)malloc(sizeof(DataType));
    d2 = (DataType *)malloc(sizeof(DataType));
    QueueGet(queue, d1);
    printf("第一次取出的队列头元素是:%d\n",*d1);
    QueueDelete(queue, d2);
    printf("第一次删除的队列头元素是:%d\n",*d2);
    QueueGet(queue, d1);
    printf("第二次取出的队列头元素是:%d\n",*d1);
    QueueDelete(queue, d2);
    printf("第二次删除的队列头元素是:%d\n", *d2);
    QueueGet(queue, d1);
    printf("第三次取出的队列头元素是:%d\n",*d1);
    QueueDelete(queue, d2);
    printf("第三次删除的队列头元素是:%d\n", *d2);
    Destroy(*queue);
    getchar();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值