c语言实现链队列的创建、入队,出队、取队顶元素、遍历的完整代码
时间: 2023-09-26 13:05:41 浏览: 142
以下是C语言实现链队列的完整代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链队列结构体
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;
}
// 判断队列是否为空
int IsEmpty(LinkQueue *Q) {
return Q->front == Q->rear;
}
// 入队操作
void EnQueue(LinkQueue *Q, int x) {
Node *s = (Node *)malloc(sizeof(Node));
s->data = x;
s->next = NULL;
Q->rear->next = s;
Q->rear = s;
}
// 出队操作
int DeQueue(LinkQueue *Q) {
if (IsEmpty(Q)) {
printf("Queue is Empty.\n");
return -1;
}
Node *p = Q->front->next;
int x = p->data;
Q->front->next = p->next;
if (Q->rear == p) {
Q->rear = Q->front;
}
free(p);
return x;
}
// 取队头元素
int GetHead(LinkQueue *Q) {
if (IsEmpty(Q)) {
printf("Queue is Empty.\n");
return -1;
}
return Q->front->next->data;
}
// 遍历队列
void TraverseQueue(LinkQueue *Q) {
if (IsEmpty(Q)) {
printf("Queue is Empty.\n");
return;
}
Node *p = Q->front->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkQueue Q;
InitQueue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
printf("队列元素为:");
TraverseQueue(&Q);
printf("队头元素为:%d\n", GetHead(&Q));
printf("出队元素为:%d\n", DeQueue(&Q));
printf("队列元素为:");
TraverseQueue(&Q);
return 0;
}
```
阅读全文