#include <stdio.h>
#include <stdlib.h>
typedef char elemType;
typedef struct Node
{
elemType data;
struct Node *next;
}QueueNode;
typedef struct queueList
{
QueueNode *front;
QueueNode *rear;
}Queue;
void InitialQueue(Queue *q)
{
q->front = NULL;
q->rear = NULL;
}
void enQueue(Queue *q, elemType value)
{
//根据传入的value创建新的队列节点,若不成功,则直接退出
QueueNode *newNode = (QueueNode *)malloc(sizeof(QueueNode));
if(newNode == NULL)
{
printf("There is not enough memory !\n");
exit(1);
}
newNode->data = value;
newNode->next = NULL;
//队列若为空,则头指针与尾指针均指向新创建的队列节点;若不为空,则新节点加入到尾指针之后,且尾指针指向新的节点
if(q->front == NULL)
{
q->front = newNode;
q->rear = newNode;
}else
{
q->rear->next = newNode;
q->rear = newNode;
}
}
elemType outQueue(Queue *q)
{
QueueNode *node = NULL;
elemType value;
//如果队列为空,则不能出队,终止程序;若队列中只有一个元素,则需同时处理队首与队尾;否则,只需处理队首
if(q->front == NULL)
{
printf("The Queue is empty and can't outQueue !\n");
exit(1);
}else if(q->front == q->rear)
{
node = q->front;
value = node->data;
free(node);
q->front = NULL;
q->rear = NULL;
}else
{
node = q->front;
value = node->data;
q->front = node->next;
}
return value;
}
elemType peekQueue(Queue *q)
{
//QueueNode *node = NULL;
elemType value;
//如果队列为空,则不能出队,终止程序;若队列中只有一个元素,则需同时处理队首与队尾;否则,只需处理队首
if(q->front == NULL)
{
printf("The Queue is empty and can't outQueue !\n");
exit(1);
}
value = q->front->data;
return value;
}
int isEmptyQueue(Queue *q)
{
if(q->front == NULL)
{
return 1;
}else
{
return 0;
}
}
void clearQueue(Queue *q)
{
QueueNode *node = q->front;
while(node != NULL)
{
q->front = node->next;
free(node);
node = q->front;
}
q->rear = NULL;
}
用链表实现队列
最新推荐文章于 2024-09-15 19:04:43 发布