上一篇我们讲了,顺序队列,那我们如何用链表实现一个队列呢。
下面来看
#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;
}
下面就是测试函数 和实现的效果
如有错误请指出,谢谢