用循环单链表实现队列

假设以带头结点的单循环链表实现链式队列,并且要求只设尾指针,不设头指针,编写实现这种链式队列初始化、入队列和出队列操作的函数

入队:我们只需要在尾节点后插入元素即可,需要注意的是,不可以使用尾插法,因为是循环链表,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

你可能感兴趣的:(数据结构,链表,数据结构)