您的位置:首页 > 其它

队列小述

2015-08-29 09:33 309 查看
队列小述

队列的定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,其是一种先进先出的线性表。与栈一样,队列也是一种重要的线性结构。队列也有顺序存储结构和链式存储结构。

队列中元素出列是在队头,入列在队尾。栈一般我们用顺序表来实现,而队列我们常用链表来实现,此时的队列简称为链队列。

队列的用链表实现的结构如下:
typedef int  ElemType;

typedef struct  QNode
{

       ElemType data;//
       struct  QNode *next;//
}QNode,*QueuePrt;

typedef struct
{
	QueuePrt front,rear;//分别代表头指针和尾指针
}LinkQueue;


头指针指向链表的头结点,尾指针指向尾结点,其中头结点不是必需的,只是为了方便队列中的结点进行相应的操作而特意加上。

判断队列为空的条件是头指针和尾指针都同时指向头结点。

创建一个空队列(具有头结点)的代码如下:
int  initQueue(LinkQueue *q)
{
	q->front = q->rear = (QueuePrt)malloc(sizeof(QNode));
	if(!(q->front))return -1;

	q->front->next = NULL;

}


给队列插入一个元素的代码如下:

void  InsertQueue(LinkQueue *q,ElemType e)
{
	QueuePrt p;
	p = (QueuePrt)malloc(sizeof(QNode));
	if(p==NULL)exit(0);
	p->data = e;
	p->next = NULL;
	q->rear->next = p;
	q->rear = p;
}


那么出队列的操作如下:
int  DeleteQueue(LinkQueue *q,ElemType *e)
{
	QueuePrt p;
	if(q->front == q->rear)return -1;
	p = q->front->next;
	*e = p->data;
	q->front->next = p->next;
	if(p==q->rear)
	{
		q->rear = q->front;

	}
	free(p);

}


链队列建立在内存的动态区,不用时应及时销毁。销毁一个队列的操作的代码:
void  DestoryQueue(LinkQueue *q)
{
	QueuePrt p;
	while(q->front)
	{
		p = q->front->next;
		free(q->front);
		q->front = p;
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: