循环单链表来表示队列
设结点结构为(data,link),试用一个全局指针P和某种链接结构实现一个队列,画出示意图,并给出入队push,出对pop和判空empty过程。要求时间复杂度均为O(1)
思想:要求时间复杂度为O(1),用只设尾指针的循环单链表(带头结点)来实现。
代码:
bool empty(LinkQueue p){//判空
return p->next=p;
}
void push(LinkQueue &p,ElemType x){//入队
Qnode* s;
s=(Qnode*)malloc(sizeof(Qnode));
s->data=x;
s->next=p->next;
p->next=s;
p=s;
}
bool pop(LinkQueue &p,ElemType x){
Qnode *s;
if(empty(p)){
printf("空队列\n");
return false;
}
//出队,链对默认有头节点
s=p->next->next;
p->next->next=s->next;
x=s->data;
if(p==s) p=p->next;
free(s);
return true;
}