思维导图:
链队列基本操作的实现:
定义链队列:
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 EnQueue(LinkQueue &Q,int x){
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
带头节点的出队:
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front == Q.rear)
return false;
LinkNode *p = Q.front->next;
x = p->data;
if(Q.rear == p)
Q.rear = Q.front;
else
Q.front->next = p->next;
free(p);
return true;
}
不带头节点的初始化:
void InitQueue(LinkQueue &Q){
Q.rear = NULL;
Q.front = NULL;
}
不带头节点的判空:
bool IsEmpty(LinkQueue Q){
if(Q.front == NULL)
return true;
else
return false;
}
不带头结点的入队:
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;
}
}
不带头结点的出队:
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front == NULL)
return false;
LinkNode *p = Q.front;
x = p->data;
if(p == Q.rear){
Q.front = NULL;
Q.rear = NULL;
}
else
Q.front = p->next;
free(p);
return true;
}