一、队列的基本操作
1.初始化队列
使队列的头指针和尾指针指向同一个结点,注意将front的next域指向NULL;
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}
2.队列判空
通过判断队列头指针和尾指针是否指向同一结点即可;
bool IsEmpty(LinkQueue Q){
return (Q.front==Q.rear);
}
3.入队操作
根据队列先进先出的原理,我们可以通过尾插法实现队列的单向操作,即从尾结点入队元素;
bool EnQueue(LinkQueue &Q,ElemType e){
LinkNode*s;
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=e;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
return true;
}
4.出队操作
定义一个与所存放的元素类型相同的变量x,用于返回出队的元素 ;
bool DeQueue(LinkQueue &Q,ElemType &x){
if(Q.front==Q.rear){
return false;}
LinkNode*q;
q=Q.front->next;
x=q->data;
Q.front->next=q->next;
free(q);
if(q==Q.rear){
Q.rear=Q.front;
Q.front=NULL;}
return true;
}
5.完整代码
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct LinkNode{
ElemType data;
LinkNode *next;
}LinkNode;
typedef struct {
LinkNode *front,*rear;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;}
bool EnQueue(LinkQueue &Q,ElemType e){
LinkNode*s;
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=e;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
return true;
}
bool DeQueue(LinkQueue &Q,ElemType &x){
if(Q.front==Q.rear){
return false;}
LinkNode*q;
q=Q.front->next;
x=q->data;
Q.front->next=q->next;
free(q);
if(q==Q.rear){
Q.rear=Q.front;
Q.front=NULL;}
return true;
}
bool IsEmpty(LinkQueue Q){
return (Q.front==Q.rear);
}
int main(){
bool ret;
LinkQueue Q;
InitQueue(Q);
ret=EnQueue(Q,3);
if(ret){
printf("入队冲冲");}
else{
printf("入队失败");}
return 0;
}