链式队列的一些操作
void enQueue(LinkQueue *q,DataType e);//入队
void initQueue(LinkQueue *q);//初始化
bool QueueEmpty(LinkQueue *q);//判断队列是否为空
void clearQueue(LinkQueue *q);//清除队列所有元素
int queueLength(LinkQueue *q);//求队列的长度
void getHead(LinkQueue *q,DataType *e);//获取队头元素
void deQueue(LinkQueue *q,DataType *e);//出队
链式队列的存储结构
typedef int DataType;
typedef struct QNode{ // 节点
DataType data;
struct QNode *next;
}QNode;
typedef struct { // 队的结构体
QNode *front;//头指针
QNode *rear;//尾指针
int count;
}LinkQueue;
void enQueue(LinkQueue *q,DataType e);//入队
void enQueue(LinkQueue *q,DataType e)//入队
{
QNode *p = (QNode *)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
if(QueueEmpty(q)){
q->front = q->rear = p;
}else {
q->rear->next = p;
q->rear = p;
}
q->count++;
}
void initQueue(LinkQueue *q);//初始化
void initQueue(LinkQueue *q)//初始化
{
if(!QueueEmpty(q)){
clearQueue(q);
}else {
q->front = q->rear = NULL;
q->count = 0;
}
}
bool QueueEmpty(LinkQueue *q);//判断队列是否为空
bool QueueEmpty(LinkQueue*q)//判断队列是否为空
{
if(q->front == NULL) return true;
else return false;
}
void clearQueue(LinkQueue *q);//清除队列所有元素
void clearQueue(LinkQueue *q)//清除队列所有元素
{
QNode *p = q->front;
while(p){
QNode *p1 = p;
p = p->next;
free(p1);
}
q->front = q->rear = NULL;
q->count = 0;
}
int queueLength(LinkQueue *q);//求队列的长度
int queueLength(LinkQueue *q)//求队列的长度
{
return q->count;
}
void getHead(LinkQueue *q,DataType *e);//获取队头元素
void getHead(LinkQueue *q,DataType *e)//获取队头元素
{
if(!QueueEmpty(q)){
*e = q->front->data;
}
}
void deQueue(LinkQueue *q,DataType *e);//出队
void deQueue(LinkQueue *q,DataType *e)//出队
{
if(!QueueEmpty(q)){
QNode *p = q->front;
*e = p->data;
q->front = q->front->next;
free(p);
q->count--;
}
}
完整代码
#include <bits/stdc++.h>
typedef int DataType;
typedef struct QNode{ // 节点
DataType data;
struct QNode *next;
}QNode;
typedef struct { // 队的结构体
QNode *front;//头指针
QNode *rear;//尾指针
int count;
}LinkQueue;
void enQueue(LinkQueue *q,DataType e);//入队
void initQueue(LinkQueue *q);//初始化
bool QueueEmpty(LinkQueue *q);//判断队列是否为空
void clearQueue(LinkQueue *q);//清除队列所有元素
int queueLength(LinkQueue *q);//求队列的长度
void getHead(LinkQueue *q,DataType *e);//获取队头元素
void deQueue(LinkQueue *q,DataType *e);//出队
int main()
{
LinkQueue lq;
lq.front = NULL; //必须有
initQueue(&lq);
if(QueueEmpty(&lq)){
printf("空\n");
}else printf("不空\n");
enQueue(&lq,10);
enQueue(&lq,3);
enQueue(&lq,8);
enQueue(&lq,5);
printf("%d\n",queueLength(&lq)); //求队列的长度
for(int i = 0;i < 3;i++){
int n;
deQueue(&lq,&n);
printf("%d\n",n);
}
clearQueue(&lq);
if(QueueEmpty(&lq)){
printf("空\n");
}else printf("不空\n");
return 0;
}
void deQueue(LinkQueue *q,DataType *e)//出队
{
if(!QueueEmpty(q)){
QNode *p = q->front;
*e = p->data;
q->front = q->front->next;
free(p);
q->count--;
}
}
void getHead(LinkQueue *q,DataType *e)//获取队头元素
{
if(!QueueEmpty(q)){
*e = q->front->data;
}
}
int queueLength(LinkQueue *q)//求队列的长度
{
return q->count;
}
void initQueue(LinkQueue *q)//初始化
{
if(!QueueEmpty(q)){
clearQueue(q);
}else {
q->front = q->rear = NULL;
q->count = 0;
}
}
void enQueue(LinkQueue *q,DataType e)//入队
{
QNode *p = (QNode *)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
if(QueueEmpty(q)){
q->front = q->rear = p;
}else {
q->rear->next = p;
q->rear = p;
}
q->count++;
}
bool QueueEmpty(LinkQueue*q)//判断队列是否为空
{
if(q->front == NULL) return true;
else return false;
}
void clearQueue(LinkQueue *q)//清除队列所有元素
{
QNode *p = q->front;
while(p){
QNode *p1 = p;
p = p->next;
free(p1);
}
q->front = q->rear = NULL;
q->count = 0;
}