数据结构之链式队列

#include <stdio.h>

#include "stdlib.h"


typedef struct MyQueueNode

{

    int data;

    struct MyQueueNode *front;

}MyQueueNode;



typedef struct MyQueue

{

    int length;

    MyQueueNode *head;

    MyQueueNode *real;

}MyQueue;


MyQueue* MyQueue_create()

{

    MyQueue *queue = (MyQueue *)malloc(sizeof(MyQueue));

    queue->head = NULL;

    queue->real = NULL;

    queue->length = 0;

    return queue;

}


int MyQueue_isEmpty(MyQueue *queue)

{

    if(queue == NULL) return 1;

    

    return queue->length == 0;

}


void MyQueue_enqueue(MyQueue *queue, int data)

{

    if(queue == NULL) return;

    

    MyQueueNode *node = (MyQueueNode *)malloc(sizeof(MyQueueNode));

    node->data = data;

    node->front = NULL;

    

    if(queue->head == NULL)

    {

        queue->head = node;

    }

    else

    {

        queue->real->front = node;

    }

    queue->real = node;

    queue->length ++;

}


int MyQueue_dequeue(MyQueue *queue)

{

    if(queue == NULL) return 0;

    

    MyQueueNode *topNode = queue->head;

    queue->head = topNode->front;

    queue->length --;

    

    int data = topNode->data;

    

    if(topNode)

    {

        free(topNode);

        topNode = NULL;

    }

    

    if(queue->length == 0)

    {

        queue->head = NULL;

        queue->real = NULL;

    }

    

    

    return data;

}


void MyQueue_myprintln(MyQueue *queue)

{

    if(queue == NULL || queue->length == 0) return;

    MyQueueNode *p = queue->head;

    while (p) {

        printf("%d ", p->data);

        p = p->front;

    }

}



void main()

{

MyQueue *linkQueue = MyQueue_create();

    MyQueue_enqueue(linkQueue, 10);

    MyQueue_enqueue(linkQueue, 11);

    MyQueue_enqueue(linkQueue, 15);

    MyQueue_enqueue(linkQueue, 17);

    MyQueue_enqueue(linkQueue, 18);

    

    MyQueue_myprintln(linkQueue);

    

    int data = MyQueue_dequeue(linkQueue);

    

    MyQueue_myprintln(linkQueue);

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值