c语言队列的链式存储入队
时间: 2023-06-04 17:06:07 浏览: 128
和出队操作是怎样的?可以详细说明一下吗?
当使用链式存储方式实现队列时,队列中的每个元素由一个结构体表示,包含一个数据域和一个指针域。指针域用来连接下一个元素,最后一个元素的指针域指向 NULL。
入队操作需要初始化一个新的结构体节点,将数据存储在其中,将该节点插入队列的末尾,并更新队列的尾指针。
出队操作将队列的头结点删除并释放,取出头节点的数据,并更新队列的头指针。
具体实现的代码可以参考下面的示例:
```c
// 队列的结构体表示
typedef struct queueNode {
int data;
struct queueNode *next;
} QueueNode;
typedef struct queue {
QueueNode *front; // 指向队列头的指针
QueueNode *rear; // 指向队列尾的指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = (QueueNode*)malloc(sizeof(QueueNode));
q->front->next = NULL;
}
// 入队操作
void enqueue(Queue *q, int data) {
QueueNode *newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
q->rear->next = newNode;
q->rear = newNode;
}
// 出队操作
int dequeue(Queue *q) {
if (q->front == q->rear) { // 队列为空
return -1;
}
QueueNode *temp = q->front->next;
int data = temp->data;
q->front->next = temp->next;
if (q->rear == temp) { // 出队后队列为空,需要更新尾指针
q->rear = q->front;
}
free(temp);
return data;
}
```
阅读全文