0.定义
typedef struct LinkNode {//链式队列的结点
ElemType data;
struct LinkNode *next;
}LingNode;
typedef struct {//链式队列
LinkNode *front, *rear;
}*LinkQueue;
1.带头结点
1.1 初始化
void InitQueue(LinkQueue &Q) {
Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));
Q.front -> next = NULL;
}
1.2判空
bool isEmpty(LinkQueue Q) {
if(Q.front == Q.rear)
return true;
else
return false;
}
1.3 入队
void EnQueue(LinkQueue &Q, Elemtype x) {
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s -> data = x;
s -> next = NULL;
Q.rear -> next = s;
Q.rear = s;
}
1.4出队
bool DeQueue(LinkQueue &Q, ElemType &x) {
if(Q.front == Q.rear)//队空报错
return false;
LinkNode *p = Q.front -> next;
x = p -> data;
Q.front -> next = p -> next;
if(Q.rear = p)
Q.rear =Q.front;
free(p);
return turn;
}
2.不带头结点
2.1初始化
void InitQueue(LinkQueue &Q) {
Q.front = NULL;
Q.rear = NULL;
}
2.2判空
bool isEmpty(LinkQueue Q) {
if(Q.front == NULL)//或Q.rear == NULL
return true;
else
return false;
}
2.3入队
void EnQueue(LinkQueue &Q, ElemType 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;
}
}
2.4出队
bool DeQueue(LinkQueue &Q, ElemType &x) {
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;
}
综上,带头结点能够统一插入和删除,更加方便。