Re:从零开始的算法学习【11】队列(2)

一.入队列操作

入队列操作就是将一个QNode类型的元素从队列的尾部进入队列。每当将一个队列元素插入队列,队列的尾指针都要进行修改(队列元素只能从队列的尾部进入队列),队头的指针不发生改变。

EnQueue (LinkQueue *q , ElemType e)
{
	QueuePtr p;
	p = (QueuePtr)malloc(sizeof(QNode));
	if(!p = NULL)	exit(0);
	p->data = e;	//将数据e存放到队列结点的data域中 
	p->next = NULL;		//指针域置NULL 
	q->rear ->next = p;		//从队尾插入结点 
	q->rear = p;	//修改队尾指针 
 }


二.出队列操作

出队列操作是将队列中的元素从队列的头部移出。每当从队列中移出数据时,队头指针front不发生改变,但是头结点的next指针要发生改变。队尾指针rear只有在原队列中只包含一个元素(即队头就是队尾)的情况下才会改变,否则也不改变。

DeQueue(LinkQueue *q , ElemType *e)
{
	//如果队列q不为空,删除q的队头元素,用e返回其值
	if(q->front == q->rear)	return;		//队列为空,返回 
	p = q->front->next;		//p指向队列的第一个元素 
	*e = p->data;		//将队首元素的数据赋值给e返回 
	q->front->next = p->next;	//删除头结点 
	if(q->rear == p)	q->rear = q->front;		//如果此时队列为空,则修改队尾指针 
	free(p); 
 } 



猜你喜欢

转载自blog.csdn.net/vincemar/article/details/80374243