头文件部分(.h文件)
#ifndef __LINKQUEUE_H__ // 条件编译,防止重复包含头文件
#define __LINKQUEUE_H__
typedef int dataType; // 定义一个名为dataType的类型别名,代表整型数据
union msg { // 定义一个联合体msg
dataType data; // 联合体成员1: data,类型为dataType
int len; // 联合体成员2: len,类型为int
};
typedef struct node { // 定义一个名为node的结构体
union msg text; // 结构体成员1: text,类型为union msg
struct node* next; // 结构体成员2: next,类型为指向node的指针
} linkQueue;
typedef struct { // 定义一个名为linkPos的结构体
linkQueue* front; // 结构体成员1: front,类型为指向linkQueue的指针
linkQueue* rear; // 结构体成员2: rear,类型为指向linkQueue的指针
} linkPos;
void initQueue(linkPos* q); // 初始化链式队列函数声明
int isEmpty(linkPos* q); // 判断链式队列是否为空函数声明
void enQueue(linkPos* q, dataType data); // 入队函数声明
void deQueue(linkPos* q); // 出队函数声明
dataType getFront(linkPos* q); // 获取队列头元素函数声明
void clearQueue(linkPos* q); // 清空队列函数声明
void printQueue(linkPos* q); // 打印链式队列元素函数声明
#endif
func函数部分(.c文件)(主要部分)
// 初始化链式队列
void initQueue(linkPos* q) {
q->front = NULL;
q->rear = NULL;
}
// 判断链式队列是否为空
int isEmpty(linkPos* q) {
return (q->front == NULL);
}
// 入队
void enQueue(linkPos* q, dataType data) {
linkQueue* newQueue = (linkQueue*)malloc(sizeof(linkQueue));
newQueue->text.data = data;
newQueue->next = NULL;
if (isEmpty(q)) {
q->front = newQueue;
q->rear = newQueue;
} else {
q->rear->next = newQueue;
q->rear = newQueue;
}
}
// 出队
void deQueue(linkPos* q) {
if (isEmpty(q)) {
printf("队列为空\n");
} else {
linkQueue* temp = q->front;
q->front = q->front->next;
free(temp);
if (q->front == NULL) {
q->rear = NULL;
}
}
}
// 获取队列头元素
dataType getFront(linkPos* q) {
if (isEmpty(q)) {
printf("队列为空\n");
return 0;
} else {
return q->front->text.data;
}
}
// 清空队列
void clearQueue(linkPos* q) {
while (!isEmpty(q)) {
deQueue(q);
}
}
// 打印链式队列元素
void printQueue(linkPos* q) {
if (isEmpty(q)) {
printf("队列为空\n");
return;
}
linkQueue* current = q->front;
while (current != NULL) {
printf("%d ", current->text.data);
current = current->next;
}
printf("\n");
}
main函数部分(.c文件)
int main(int argc, const char *argv[])
{
linkPos queue;
initQueue(&queue);
// 入队操作
enQueue(&queue, 10);
enQueue(&queue, 20);
enQueue(&queue, 30);
// 打印队列
printf("当前队列元素:");
printQueue(&queue); // 输出:10 20 30
// 出队操作
deQueue(&queue);
// 打印队列
printf("当前队列元素:");
printQueue(&queue); // 输出:20 30
// 获取队列头元素
printf("队列头元素:%d\n", getFront(&queue)); // 输出:20
// 清空队列
clearQueue(&queue);
// 打印队列
printf("当前队列元素:");
printQueue(&queue); // 输出:队列为空
return 0;
}
代码运行结果
当前队列元素:10 20 30
当前队列元素:20 30
队列头元素:20
当前队列元素:队列为空