C语言实现链队列的初始化,队尾插入数据,弹出队首元素,对换首位数据
时间: 2023-08-15 18:08:15 浏览: 91
数据机构——链队列的算法(无漏洞版)
好的,我来回答你的问题。
1. C语言实现链队列的初始化:
```c
#define MAXSIZE 100 // 定义一个队列的最大长度
// 定义一个链队列结构体
typedef struct Node {
int data; // 队列中的数据
struct Node* next; // 队列中下一个元素的指针
} Node;
typedef struct {
Node* front; // 队首指针
Node* rear; // 队尾指针
} LinkQueue;
// 初始化队列
void InitQueue(LinkQueue* Q) {
Q->front = Q->rear = (Node*)malloc(sizeof(Node)); // 创建头结点
Q->front->next = NULL; // 头结点的指针为空
}
```
2. 队尾插入数据:
```c
// 入队
void EnQueue(LinkQueue* Q, int e) {
Node* p = (Node*)malloc(sizeof(Node)); // 创建一个新节点
p->data = e; // 将e赋值给新节点的数据域
p->next = NULL; // 新节点的指针为空
Q->rear->next = p; // 队尾指针指向新节点
Q->rear = p; // 将队尾指针指向新节点
}
```
3. 弹出队首元素:
```c
// 出队
int DeQueue(LinkQueue* Q) {
if (Q->front == Q->rear) { // 队列为空
printf("队列为空!");
return -1;
}
Node* p = Q->front->next; // p指向队列的第一个元素
int e = p->data; // 取出队首元素的值
Q->front->next = p->next; // 队首指针指向下一个元素
if (Q->rear == p) { // 如果队列中只有一个元素
Q->rear = Q->front; // 队尾指针指向头结点
}
free(p); // 释放掉队首元素的空间
return e; // 返回队首元素的值
}
```
4. 对换首位数据:
```c
// 对换队首与队尾元素
void Swap(LinkQueue* Q) {
if (Q->front == Q->rear) { // 队列为空
printf("队列为空!");
return;
} else if (Q->front->next == Q->rear) { // 队列中只有一个元素
printf("队列中只有一个元素,无法交换!");
return;
}
Node* p = Q->front->next; // p指向队列的第一个元素
Node* q = p->next; // q指向队列的第二个元素
while (q != Q->rear) { // 找到队列中倒数第二个元素
q = q->next;
}
// 对换队首和队尾元素的值
int temp = p->data;
p->data = q->data;
q->data = temp;
}
```
以上就是C语言实现链队列的初始化、队尾插入数据、弹出队首元素、对换首位数据的完整代码。希望能对你有所帮助!
阅读全文