队列的链式存储结构的实现
时间: 2024-06-13 08:05:11 浏览: 217
队列的链式存储结构实际上就是线性表的单链表,只不过是能尾进头出,简称为链队列。为了操作上的方便,将队头指针指向链队列的头结点,而队尾指针指向终端结点。空队列时,front和rear都指向头结点。链队列的结构可以用以下代码表示:
```
typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */
typedef struct QNode /* 结点结构 */
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct /* 队列的链表结构 */
{
QueuePtr front,rear; /* 队头、队尾指针 */
}LinkQueue;
```
其中,QNode为队列的结点结构体,QueuePtr为指向QNode的指针类型,LinkQueue为队列的链表结构体,包含队头指针front和队尾指针rear。
队列的链式存储结构的入队操作可以用以下代码表示:
```
/* 链式队列的入队操作 */
Status EnQueue(LinkQueue *Q,QElemType e)
{
QueuePtr s = (QueuePtr)malloc(sizeof(QNode));
if(!s) /* 存储分配失败 */
exit(OVERFLOW);
s->data = e;
s->next = NULL;
Q->rear->next = s; /* 把拥有元素e新结点s赋值给原队尾结点的后继 */
Q->rear = s; /* 把当前的s设置为队尾结点,rear指向s */
return OK;
}
```
其中,EnQueue为入队操作函数,Q为链队列指针,e为要入队的元素。该函数首先创建一个新结点s,将要入队的元素e赋值给s的data域,将s的next指针置为NULL。然后将s赋值给原队尾结点的后继,将rear指向s,完成入队操作。
阅读全文