/**************************
队列的链式存储结构
功能代码包含:
1)队列的链式存储结构的数据结构定义
2)初始化链式队列
3)往链式队列中插入元素--入队
4)删除链式队列中的元素--出队
注意:代码不进行debug,只实现基本功能
Author:tmw
date:2018-3-9
**************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define error -65530
/**队列的链式存储结构的数据结构定义**/
typedef struct LinkQueueNode
{
int data;
struct LinkQueueNode *next;
}LinkQueueNode,*LinkQueuePtr;
typedef struct LinkQueue
{
LinkQueuePtr front;
LinkQueuePtr rear;
int len;
}LinkQueue;
/**初始化链式队列**/
bool initLinkQueue( LinkQueue *Q )
{
Q = (LinkQueue*)malloc(sizeof(LinkQueue));
if( !Q )
return false;
/**让队头等于队尾**/
Q->front = Q->rear = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));
/**队尾的next指针指向null**/
Q->rear->next = NULL;
/**队头的next指针指向队尾**/
Q->front->next = Q->rear;
/**初始化队长为0**/
Q->len = 0;
return true;
}
/**往链式队列中插入元素e--入队**/
bool EnQueue( LinkQueue *Q, int e )
{
/**链式存储不用考虑队列是否满的问题**/
LinkQueuePtr p;
p = (LinkQueuePtr)malloc(sizeof(LinkQueueNode));
if(!p)
return false;
p->data = e;
p->next = Q->rear->next; //即p->next = NULL
Q->rear->next = p;
Q->rear = p;
Q->len++;
return true;
}
/**删除链式队列中的元素--出队,并返回出队元素**/
int DeQueue( LinkQueue *Q )
{
/**出队前判断:队列不能为空**/
if( Q->front == Q->rear )
return error;
LinkQueuePtr p;
p = Q->front->next;
int e = p->data;
Q->front->next = p->next;
if( p == Q->rear )//删除该元素后,队列就空了
Q->rear = Q->front;
free(p);
Q->len--;
return e;
}
梦想还是要有的,万一实现了呢~~~ヾ(◍°∇°◍)ノ゙