news 2026/6/11 4:28:38

C语言数据结构-链表实现队列详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言数据结构-链表实现队列详解

链表是一种动态数据结构,通过节点间的指针连接实现数据存储。队列是一种先进先出的线性结构,链表实现队列可以避免数组实现时的空间限制问题。

  • 入队:从队尾加入

  • 出队:从队首移除

一、数据结构定义

两个节点:

  • front:总指向第一个节点(出队端)

  • rear:总指向最后一个节点(入队端)

#include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node* next; }Node; //取别名 Node* front = NULL; // 队首指针 Node* rear = NULL; // 队尾指针

二、代码详解

2.1 入队操作(add_queue)

步骤:创建新节点 → 连接队尾 → 更新rear

void add_queue(int value) { // 步骤1:创建新节点 // malloc分配内存,类似:新建一个"盒子" Node* new_node = (Node*)malloc(sizeof(Node)); new_node->data = value; new_node->next = NULL; // 步骤2:判断队列是否为空 if (rear == NULL) { // 队列为空时,新节点既是队首也是队尾 front = new_node; // 队首指向新节点 rear = new_node; // 队尾也指向新节点 } else { // 队列不为空时 rear->next = new_node; // 当前队尾的下一个指向新节点 rear = new_node; // 队尾指针更新为新节点 } }

2.2 出队操作(del_queue)

步骤:保存front → 移动front → 检查是否变空 → 释放内存

int del_queue() { // 步骤1:检查队列是否为空 if (front == NULL) { return -1; // 队列为空 } // 步骤2:保存要删除的节点 Node* temp = front; // temp指向队首 int value = temp->data; // 保存数据 // 步骤3:移动front指针 front = front->next; // front指向下一个节点 // 步骤4:如果出队后队列为空,重置rear if (front == NULL) { rear = NULL; } // 步骤5:释放内存 free(temp); return value; }

2.3 打印队列(print_queue)

void print_queue() { if (front == NULL) { printf("队列为空!\n"); return; } Node* current = front; // 从队首开始 while (current != NULL) { printf("%d ", current->data); current = current->next; // 移动到下一个节点 } printf("\n"); }

2.4 清空队列(clear_queue)

void clear_queue() { while (front != NULL) { del_queue(); } printf("队列已清空!\n"); }

2.4 主函数main

int main() { int a, b, c; a = 10; b = 20; c = 30; printf("=== 链表实现队列测试 ===\n\n"); // 测试入队 printf("1. 测试入队操作:\n"); add_queue(a); add_queue(b); add_queue(c); print_queue(); // 测试获取队首 printf("\n2. 获取队首元素:%d\n", get_front()); // 测试出队 printf("\n3. 测试出队操作:\n"); del_queue(); print_queue(); // 继续入队 printf("\n4. 继续入队:\n"); add_queue(40); add_queue(50); print_queue(); // 出队所有元素 printf("\n5. 出队所有元素:\n"); while (front != NULL) { del_queue(); } print_queue(); // 测试空队列操作 printf("\n6. 测试空队列操作:\n"); del_queue(); // 应该提示队列为空 return 0; }

三、运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 16:16:28

DAY32函数专题 1:函数定义与参数

知识点回顾: 1.函数的定义 2.变量作用域:局部变量和全局变量 3.函数的参数类型:位置参数、默认参数、不定参数 传递参数的手段:关键词参数4. 5.传递参数的顺序:同时出现三种参数类型时

作者头像 李华
网站建设 2026/6/10 16:30:52

Linly-Talker结合Stable Diffusion生成超写实肖像

Linly-Talker 结合 Stable Diffusion 生成超写实肖像 在虚拟主播、AI客服、数字员工日益普及的今天&#xff0c;一个核心问题摆在开发者面前&#xff1a;如何以极低成本快速构建既逼真又能互动的数字人&#xff1f;传统方案依赖动捕设备、专业建模与动画师&#xff0c;周期长、…

作者头像 李华
网站建设 2026/6/8 14:42:18

开发者必看:如何基于Linly-Talker二次开发定制功能

开发者必看&#xff1a;如何基于Linly-Talker二次开发定制功能 在虚拟主播24小时不间断直播、AI客服秒回用户咨询、企业数字员工接待访客的今天&#xff0c;我们正快速步入一个“人机共生”的交互新时代。支撑这些场景的背后&#xff0c;并非昂贵的动作捕捉设备或庞大的动画团…

作者头像 李华
网站建设 2026/6/8 12:10:24

Linly-Talker vs 传统虚拟人:效率、成本与体验全面对比

Linly-Talker vs 传统虚拟人&#xff1a;效率、成本与体验全面对比 在智能客服越来越“能说会道”、虚拟主播24小时不间断直播的今天&#xff0c;你有没有想过——这些数字面孔背后&#xff0c;到底是靠几十万的动作捕捉设备和动画师团队精雕细琢&#xff0c;还是仅仅用一张照片…

作者头像 李华
网站建设 2026/6/7 17:34:36

Linly-Talker语音克隆功能实测:1分钟复刻你的声音

Linly-Talker语音克隆功能实测&#xff1a;1分钟复刻你的声音 在直播带货的深夜&#xff0c;你是否想过让一个“数字分身”替你讲解商品&#xff1f;在反复录制网课时&#xff0c;有没有一瞬间希望有个“AI教师”能自动帮你生成讲解视频&#xff1f;如今&#xff0c;这些场景正…

作者头像 李华