//1.构造一个空队列Q
Status InitQueue(LinkQueue &Q){
//构造一个空队列Q
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit(OVERFLOW); //存储分配失败
Q.front->next=NULL; //Q.front指针指的指向空,如图a
return OK;
}
//2.销毁队列Q
Status DestroyQueue(LinkQueue &Q){
while(Q.front){ //Q.rear指向Q.front->next指向的地方
Q.rear=Q.front->next; //如图a,将Q.front->next指的地方赋值给
free(Q.front); //使用free或delete之后,只是把指针所指的内容给释放掉,但是指针并没有被干掉,还是指向原来位置(并不是执行NULL),此时指针指向的内容为垃圾,被称为“野指针”。
Q.front=Q.rear; //将 Q.rear 所指向的地址赋给 Q.front.使它们指向同一个地址
}
return OK;
}
//7.插入元素e为Q的新的队尾元素
Status EnQueue(LinkQueue &Q,QElemType e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW); //存储分配失败
p->data=e;
p->next=NULL;
Q.rear->next=p; //让Q.rear->next(尾指针元素的next指向) 指向 p
Q.rear=p; //Q.rear 指向 p
return OK;
}
//8. 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回 ERROR
Status DeQueue(LinkQueue &Q,QElemType &e){
QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return OK;
}