假设以带头结点的单循环链表实现链式队列,并且要求只设尾指针,不设头指针,编写实现这种链式队列初始化、入队列和出队列操作的函数
入队:我们只需要在尾节点后插入元素即可,需要注意的是,不可以使用尾插法,因为是循环链表,rear->next是头指针,所以我们应该在尾节点使用头插法,并让rear指向新队尾。出队:需要注意当出队后,队列为空时,rear指向头结点
在不带头结点的循环链表中,(rear->next == rear) 表示该队列中只有一个元素; 在带头结点的循环链表中,(rear->next == rear)表示该队列为空,即没有元素;
/*-------------一、不带头结点的循环单链表示队列------------------------*/
void InitQu(QNode *&rear){
rear=NULL;
}
//入队
void EnQu(QNode *&rear,ElemType x){
QNode *s;
s=(QNode *)malloc(sizeof(QNode));
s->data=x;
if (rear==NULL) //队列为空
{
s->next=s;
rear=s;
}
else{ //队列不为空
s->next=rear->next;
rear->next=s;
rear=s;
}
}
//出队
int DeQu(QNode *&rear,ElemType &x){
QNode *q;
if(rear==NULL)
return