学习笔记
一、基本操作
1.初始化
typedef struct LinkNode{ //链式队列结点
int data;
struct 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 IsEmpty(LinkQueue Q){
if(Q.front == Q.rear) return true;
else return false;
}
//初始化(不带头结点)
void InitQueue(LinkQueue &Q){
Q.front = NULL;
Q.rear = NULL;
}
//判断队列是否为空
bool IsEmpty(LinkQueue Q){
if(Q.front == NULL) return true;
else return false;
}
2.入队
//入队(带头结点)
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;
}
//入队(不带头结点)
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;
}
}
3.出队
//出队(带头结点)
bool DeQueue(LinkQueue &Q){
if(Q.front == Q.rear) return false;
LinkNode *p = Q.front->next;
int x;
x = p->next;
Q.front->next = p->next;
if(Q.rear == p) Q.rear = Q.front;
free(p);
return true;
}
//出队(不带头结点)
bool DeQueue(LinkQueue &Q){
if(Q.front == NULL) return false;
LinkNode *p = Q.front;
x = p->data;
Q.front = p->next;
if(Q.rear == p){
Q.front = NULL;
Q.rear = NULL;
}
free(p);
return true;
}