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

一,队列的定义

队列也是一种重要的线性结构。和栈同样需要顺序表或者链表为基础。与栈不同的是,队列是一种先进先出的线性表,所有数据被要求从队列一端进入,另一端离开。允许插入数据的一端叫队尾,允许离开的一端叫队头。

typedef struct QNode{
	QelemType data;		//链队列结点中的数据域 
	struct QNode *next;		//链队列结点中的指针域 
}QNode , *QueuePtr;

typedef struct{
	QueuePtr front;		//队头指针 
	QueuePtr rear;		//队尾指针 
}LinkQueue;

QNode类是一个队列元素列,也就是说,队列内每个元素的类型都是QNode。因为要定义一个链队列,因此每个队列元素不但要包括数据本身,还要包括一个指针域,用来存放后继元素的指针。因此QNode是一个结构体,本质与链表相同。LinkQueue的结构体类型指向队列的头尾地址。

二.创建一个队列

①在内存中创建一个头结点,该头结点是为了方便操作人为添加的。(也可不定义)

②将队列的头指针和尾指针都指向这个生成的头结点,此时队列中没有任何队列元素,该队列为空队列。这种方式创建的队列,队列为空的判定方式就是头指针front和尾指针rear都同时指向头结点。

initQueue(LinkQueue *q)
{
	//初始化一个空队列
	q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
	//创建一个头结点,队头队尾指针指向该结点
	if(!q->front)	exit(0);	//创建头结点失败
	q->front->next = NULL;		//头结点指针域置NULL 
} 

(1)用malloc()函数创建一个QNode类型的结点,将q->front和q->rear指针分别指向该头结点。

(2)然后将该头结点的指针域next置为空NULL。


猜你喜欢

转载自blog.csdn.net/vincemar/article/details/80369150
今日推荐