用链表实现队列

来源:互联网 发布:水电工程预算软件 编辑:程序博客网 时间:2024/06/06 01:21
#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;}

原创粉丝点击