链队列的出队和入队和初始化
时间: 2024-06-13 19:07:50 浏览: 162
链队列是一种基于链表实现的队列结构,它通过移动头指针和尾指针来实现出队和入队。链队列包含多个结点,每个结点都有一个数据域和一个指向下一节点的指针。当要将元素添加到链队列时,只需新建一个结点,并将该结点加入到链表末尾即可,取出元素时,则只需获取链表头节点中的数据域,并释放该节点的空间。
链队列的初始化操作:
```c
typedef struct QNode{
int data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
}LinkQueue;
// 初始化链队列
void InitQueue(LinkQueue *Q){
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q->front) exit(0); // 存储分配失败
Q->front->next = NULL;
}
```
链队列的入队操作:
```c
// 元素入队
void EnQueue(LinkQueue *Q, int e){
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0); // 存储分配失败
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
```
链队列的出队操作:
```c
// 元素出队
void DeQueue(LinkQueue *Q, int *e){
QueuePtr p;
if(Q->front == Q->rear) return; // 队列为空
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p) Q->rear = Q->front; // 若队列只有一个元素,删除后将rear指向头结点
free(p);
}
```
阅读全文