队列的链式存储C语言描述
LinkQueue.h文件
#ifndef LINKQUEUE_H
#define LINKQUEUE_H
typedef unsigned char LQElemType;
typedef struct QueueNode
{
LQElemType data;
struct QueueNode* next;
}QueueNode;
typedef struct
{
QueueNode Front;
QueueNode * Rear;
}LinkQueue;
void LinkQueue_Init(LinkQueue* Q);
void LinkQueue_Enter(LinkQueue* Q,LQElemType e);
void LinkQueue_Traverse(LinkQueue Q);
LQElemType LinkQueue_GetFront(LinkQueue Q);
LQElemType LinkQueue_Delete(LinkQueue* Q);
void LinkQueue_Clear(LinkQueue* Q);
void LinkQueue_Test(void);
#endif
LinkQueue.c文件
#include "LinkQueue.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void LinkQueue_Init(LinkQueue* Q)
{
Q->Front.data = 0;
Q->Front.next = NULL;
Q->Rear = &Q->Front;
Q->Rear->data = 0;
Q->Rear->next = NULL;
}
void LinkQueue_Enter(LinkQueue* Q , LQElemType e)
{
QueueNode* NewNode = malloc(sizeof(QueueNode));
if (NewNode != NULL)
{
NewNode->data = e;
NewNode->next = NULL;
Q->Rear->next = NewNode;
Q->Rear = NewNode;
}
else
printf("申请内存失败!");
}
void LinkQueue_Traverse(LinkQueue Q)
{
assert(Q.Front.next != NULL);
QueueNode* p = Q.Front.next;
while (p != NULL)
{
printf("%c ", p->data);
p = p->next;
}
printf("\n");
}
LQElemType LinkQueue_GetFront(LinkQueue Q)
{
assert(Q.Front.next != NULL);
return Q.Front.next->data;
}
LQElemType LinkQueue_Delete(LinkQueue* Q)
{
assert(Q->Front.next != NULL);
LQElemType e = Q->Front.next->data;
QueueNode* temp = Q->Front.next;
Q->Front.next = temp->next;
free(temp);
if (Q->Front.next == NULL)
{
Q->Rear = &Q->Front;
}
return e;
}
void LinkQueue_Clear(LinkQueue* Q)
{
assert(Q->Front.next != NULL);
QueueNode* temp;
while (Q->Front.next != NULL)
{
temp = Q->Front.next;
Q->Front.next = temp->next;
free(temp);
}
Q->Rear = &Q->Front;
}
void LinkQueue_Test(void)
{
LinkQueue Q;
LinkQueue_Init(&Q);
LinkQueue_Enter(&Q,'A');
LinkQueue_Enter(&Q, 'B');
LinkQueue_Enter(&Q, 'C');
LinkQueue_Enter(&Q, 'D');
LinkQueue_Traverse(Q);
printf("%c\n", LinkQueue_GetFront(Q));
LinkQueue_Delete(&Q);
LinkQueue_Traverse(Q);
LinkQueue_Enter(&Q, 'E');
LinkQueue_Traverse(Q);
}
测试:main.c文件
# include <stdio.h>
#include "LinkQueue.h"
int main()
{
LinkQueue_Test();
return 0;
}
测试结果: