数据结构之链式队列

上一篇我们讲了,顺序队列,那我们如何用链表实现一个队列呢。
下面来看

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#define HEADER printf("\n==========%s==========\n",__FUCTION__)
typedef char linkqueuetype;
typedef struct linkqueuenode{
    linkqueuetype data;
    struct linkqueuenode *next;
}linkqueuenode;

typedef struct linkqueue{//为了方便取链表头和尾的元素,定义一个头指针,一个尾指针。
    linkqueuenode *head;
    linkqueuenode *tail;
}linkqueue;
void linkqueue_init(linkqueue *q);
void linkqueue_print(linkqueue *q);
void linkqueue_push(linkqueue *q,linkqueuetype value);
void linkqueue_pop(linkqueue *q);
int linkqueue_gettop(linkqueue *q,linkqueuetype *value);

下面我们看下具体的代码实现

#include"linkqueue.h"
void linkqueue_init(linkqueue *q)
{
    if(q == NULL)
    {
        return;
    }
    q->head = q->tail =(linkqueuenode*)malloc(sizeof(linkqueuenode));
    //申请一个头结点,不关心它的数值
    if(q->head == NULL)
    {
        return;//申请失败
    }
    q->head->next = NULL;
    return;
}
void linkqueue_print(linkqueue *q)
{
    if(*q = NULL)
    {
        return;
    }
    if(q->head->next = NULL)
    {
        return;
    }
    linkqueuenode *cur = q->head->next;
    while(cur != NULL)
    {
        printf("[%c] ",cur->data);
        cur = cur->next;
    }
    printf("\n");
}
void linkqueue_push(linkqueue *q,linkqueuetype value)
{
    if(q == NULL)
    {
        return;
    }
    linkqueuenode *newnode = (linkqueuenode *)malloc(sizeof(linkqueuenode));
    newnode->data = value;
    newnode->next = NULL;
    linkqueuenode *cur = q->tail;
    cur->next = newnode;
    q->tail = newnode;

}
void linkqueue_pop(linkqueue *q)
{
    if(q == NULL)
    {
        return;
    }
    if(q->head->next == NULL)
    {
        return;
    }
    linkqueuenode *cur = q->head;
    linkqueuenode *todelet = cur->head->next
    cur->next = todelet->next;
    free(todelet);
    todelet = NULL;

}
int linkqueue_gettop(linkqueue *q,linkqueuetype *value)
{
    if(q == NULL||value == NULL)
    {
        return -1;
    }
    if(q->head->next == NULL)
    {
        return 0;
    }
    *value = q->head->next->data;
    return 1;
}

下面就是测试函数 和实现的效果
这里写图片描述

这里写图片描述

这里写图片描述


如有错误请指出,谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值