队列的链式存储(C语言)
链式队列
带有头结点
类型定义
typedef int ElemType;
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;
}
判空
int QueueEmpty(LinkQueue Q){
if(Q.front==Q.rear)
return 1;
else
return 0;
}
入队
void EnQueue(LinkQueue *Q,int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
(*Q).rear->next=s;
(*Q).rear=s;
}
出队
int DeQueue(LinkQueue *Q,int *x){
if((*Q).front==(*Q).rear)
return 0;
LinkNode *p=(*Q).front->next;
(*x)=(*Q).front->data;
(*Q).front->next=p->next;
if((*Q).rear==p)
(*Q).rear=(*Q).front;
free(p);
return 1;
}
不带头结点
类型定义
typedef int ElemType;
typedef struct LinkNode{
ElemType data;
LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
初始化
int InitQueue(LinkQueue *Q){
(*Q).front=NULL;
(*Q).rear=NULL;
}
判空
int QueueEmpty(LinkQueue Q){
if(Q.front==NULL)
return 1;
else
return 0;
}
入队
void EnQueue(LinkQueue *Q,int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
if((*Q).front==NULL){
(*Q).front=s;
(*Q).rear=s;
}
else{
(*Q).rear->next=s;
(*Q).rear=s;
}
}
出队
int DeQueue(LinkQueue *Q,int *x){
if((*Q).front==NULL)
return 0;
LinkNode *p=(*Q).front;
*x=p->data;
(*Q).front=p->next;
if((*Q).rear==p){
(*Q).front=NULL;
(*Q).rear=NULL;
}
free(p);
return 1;
}