队列的链式存储
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int ElemType;
typedef struct QNODE{
ElemType data;
struct QNODE* next;
}QueueNode,*QueueNodePtr;
typedef struct QLIST{
QueueNodePtr font;
QueueNodePtr rear;
int count;
}ListQueue,*ListQueuePtr;
ListQueuePtr InitQueue();//初始化队列
void InsertQueue(ListQueuePtr s,ElemType e);//插入元素
void GetHead(ListQueuePtr s,ElemType* e);//得到对头元素;
bool QueueEmpty(ListQueuePtr s);//判断对列是否为空
int QueueLength(ListQueuePtr s);//得到队列的长度
void QueueFree(ListQueuePtr s);//释放队列
void QueuePrint(ListQueuePtr s);//打印队列
int main()
{
ListQueuePtr s = InitQueue();
for (int i = 0; i < 10; i++)
{
InsertQueue(s,i);
}
QueuePrint(s);
system("pause");
return 0;
}
ListQueuePtr InitQueue()
{
ListQueuePtr s = (ListQueuePtr)malloc(sizeof(ListQueue));
s->font = s->rear = (QueueNodePtr)malloc(sizeof(QueueNode));
s->rear->next = NULL;
s->count = 0;
return s;
}
void InsertQueue(ListQueuePtr s, ElemType e)
{
if (s == NULL)
{
return;
}
QueueNodePtr NewNode = (QueueNodePtr)malloc(sizeof(QueueNode));
NewNode->data = e;
NewNode->next = NULL;
s->rear->next = NewNode;
s->rear = NewNode;
s->count++;
}
void GetHead(ListQueuePtr s, ElemType* e)
{
*e = s->font->next->data;
}
bool QueueEmpty(ListQueuePtr s)
{
if (s->count == 0)
{
return true;
}
else
{
return false;
}
}
int QueueLength(ListQueuePtr s)
{
return s->count;
}
void QueueFree(ListQueuePtr s)
{
QueueNodePtr TempNode = s->font->next;
while (s->count)
{
QueueNodePtr FreeNode = TempNode;
TempNode = TempNode->next;
free(FreeNode);
s->count--;
}
}
void Print(int e)
{
printf("%d", e);
}
void QueuePrint(ListQueuePtr s)
{
QueueNodePtr TempNode = s->font->next;
while (TempNode != NULL)
{
printf("%d",TempNode->data);
TempNode = TempNode->next;
}
}