LinkQueue.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef int ElemType;
typedef struct LinkQueueNode
{
ElemType data;
struct LinkQueueNode* next;
}LinkQueueNode;
typedef struct LinkQueue
{
LinkQueueNode * head;
LinkQueueNode* tail;
}LinkQueue;
void LinkQueueInit(LinkQueue* pq);
void LinkQueueEn(LinkQueue* pq, ElemType n);
void LinkQueueDe(LinkQueue* pq);
ElemType LinkQueueFront(LinkQueue* pq);
bool LinkQueueEmpty(LinkQueue* pq);
void LinkQueueShow(LinkQueue* pq);
.
.
.
LinkQueue.c
#include"queue.h"
void LinkQueueInit(LinkQueue* pq)
{
assert(pq!=NULL);
pq->head = pq->tail = NULL;
}
void LinkQueueEn(LinkQueue* pq, ElemType n)
{
LinkQueueNode* newNode = (LinkQueueNode*)malloc
(sizeof(LinkQueueNode));
assert(newNode);
//尾插
newNode->data = n;
newNode->next = NULL;
//1.没有结点
//2.一个及一个以上
if (pq->head == NULL)
pq->head=pq->tail = newNode;
else
{
pq->tail->next = newNode;
pq->tail = newNode;
}
}
void LinkQueueDe(LinkQueue* pq)
{
//1.没有结点
//2.一个
//3.一个以上
if (pq->head == NULL)
return;
else if(pq->head==pq->tail)
{
pq->head = pq->tail = NULL;
}
else
{
LinkQueueNode* next = pq->head->next;
free(pq->head);
pq->head = next;
}
}
ElemType LinkQueueFront(LinkQueue* pq)
{
return pq->head->data; //return pq->tail->data;
}
bool LinkQueueEmpty(LinkQueue* pq)
{
return pq->head == NULL;
}
void LinkQueueShow(LinkQueue* pq)
{
LinkQueueNode* cur = pq->head;
while (cur != NULL)
{
printf(" %d ", cur->data);
cur = cur->next;
}
printf("\n");
}
.
.
.
test.c
#include"queue.h"
void TestLinkQueue()
{
LinkQueue q;
LinkQueueInit(&q);
LinkQueueEn(&q,1);
LinkQueueEn(&q, 2);
LinkQueueEn(&q, 3);
LinkQueueEn(&q, 4);
LinkQueueEn(&q, 5);
LinkQueueEn(&q, 6);
LinkQueueShow(&q);
LinkQueueDe(&q);
LinkQueueShow(&q);
while (!LinkQueueEmpty(&q))
{
printf("%d 出队。\n", LinkQueueFront(&q));
LinkQueueDe(&q);
}
//LinkQueueDestroy(&q);
}
int main()
{
TestLinkQueue();
return 0;
}