新闻详情

新闻详情

首页 / 资讯中心 / 详情

带头结点的链队操作集(C语言版)

发布时间:2026/9/30 1:44:25来源:尧图网络
带头结点的链队操作集(C语言版)
/*带头结点的链队的操作集中包含的操作1、初始化链队 QStatus InitQueue_LQ(LQueue Q, int size);2、销毁链队 QStatus DestroyQueue_LQ(LQueue Q);3、判断链队 Q 是否为空Status QueueEmpty_LQ(LQueue Q);4、清空链队 QStatus ClearQueue_LQ(LQueue Q);5、入队操作Status EnQueue_LQ(LQueue Q, ElemType e);6、出队操作Status DeQueue_LQ(LQueue Q, ElemType e);7、读取队头元素并用 e 返回Status GetHead_LQ(LQueue Q, ElemType e);*/#includestdio.h#includestdlib.h#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1#define PERROR -2typedef int Status;// 数据元素的类型使用时需根据问题的需求定义。typedef int ElemType;// 结点类型定义typedef struct LQNode{ElemType data; // 数据域struct LQNode *next; // 指针域}LQNode, *LQNodePtr; // 结点及指针类型// 链队结构类型定义typedef struct{LQNodePtr front; // 队头指针LQNodePtr rear; // 队尾指针}LQueue; // 链队类型// 1、链队初始化Status InitQueue_LQ(LQueue Q){Q.front (LQNode *)malloc(sizeof(LQNode)); // 申请头结点存储空间if (Q.front NULL) return OVERFLOW; // 内存分配失败Q.rear Q.front;Q.front-next NULL; // 将头结点指针域置为 NULLreturn OK;}// 2、销毁链队Status DestroyQueue_LQ(LQueue Q){if(Q.frontNULL)return PERROR; // 参数合法性检验参数非法或已销毁返回不再执行销毁操作//从头结点开始依次队每一个结点释放内存,这里Q.rear辅助向后传递的一个临时指针使用while (Q.front!NULL){Q.rear Q.front-next;free(Q.front);Q.front Q.rear;}Q.front NULL; // 避免指针悬挂Q.rear NULL; // 避免指针悬挂return OK;}// 3、判断链队 Q 是否为空Status QueueEmpty_LQ(LQueue Q){if(Q.front NULL)return PERROR; // 参数合法性检验if(Q.front Q.rear){return TRUE;}else{return FALSE;}}// 4、清空链队QStatus ClearQueue_LQ(LQueue Q){if(Q.front NULL) return PERROR; // 参数合法性检验while (Q.front-next!NULL){Q.rear Q.front-next;Q.front-next Q. rear-next;free(Q.rear);}Q.rear Q.front; // 避免指针悬挂return OK;}// 5、入队操作EnQueue_LQ(LQueue Q, ElemType e){if(Q.frontNULL)return PERROR; // 参数合法性检验非法返回参数错误LQNodePtr p;p (LQNode *)malloc(sizeof(LQNode));if(p NULL) return OVERFLOW; // 内存分配失败p-data e;p-next NULL;if(Q.front NULL){ // 如果队空Q.front-next p;}else{Q.rear-next p; // 如果队非空在队尾添加}Q.rear p;return OK;}// 6、出队操作Status DeQueue_LQ(LQueue Q, ElemType e){if(Q.frontNULL)return PERROR; // 参数合法性检验非法返回参数错误LQNodePtr p;if(Q.rear Q.front)return ERROR; // 如果队空返回不执行操作p Q.front-next;e p-data;Q.front-next p-next;if(Q.front-next NULL){Q.rear Q.front; // 如果删除后队空移动队尾指针到头结点}free(p);return OK;}// 7、读取队头元素并用 e 返回Status GetHead_LQ(LQueue Q, ElemType e){if(Q.frontNULL)return PERROR; // 参数合法性检验非法返回参数错误if(Q.front Q.rear)return ERROR; // 如果是空队无法读取返回错误LQNodePtr p Q.front-next;e p-data; // 队头元素交给 ereturn OK;}int main(){int i, e, state;LQueue Q;printf(1.初始化队列\n);printf(2.销毁队列\n);printf(3.判断队列是否为空\n);printf(4.清空队列\n);printf(5.将元素入队\n);printf(6.队头元素出队\n);printf(7.取队头元素并返回\n);do{printf(请输入你要进行的操作\n);scanf(%d,i);switch(i){case 1 :state InitQueue_LQ(Q);if(state OK){printf(队列初始化成功。\n);}else{printf(队列初始化失败\n);}break;case 2 :state DestroyQueue_LQ(Q);if(state PERROR){printf(请确认参数合法化或者先执行队列的初始化操作\n);}else{printf(队列销毁成功。\n);}break;case 3 :state QueueEmpty_LQ(Q);if(state PERROR){printf(请确认参数合法化或者先执行队列的初始化操作\n);}else if(state TRUE){printf(队列为空\n);}else if(state FALSE){printf(队列不为空!\n);}break;case 4 :state ClearQueue_LQ(Q);if(state PERROR){printf(请确认参数合法化或者先执行队列的初始化操作\n);}else{printf(已为您清空队列。\n);}break;case 5 :printf(请输入将要入队的元素的值\n);scanf(%d,e);state EnQueue_LQ(Q,e);if(state PERROR){printf(请确认参数合法化或者先执行队列的初始化操作\n);}else if(state OK){printf(元素 %d 成功入队。\n,e);}else{printf(元素 %d 入队失败\n,e);}break;case 6 :state DeQueue_LQ(Q, e);if(state PERROR){printf(请确认参数合法化或者先执行队列的初始化操作\n);}else if(state OK){printf(元素 %d 成功出队\n,e);}else{printf(队列内没有元素不能执行出队操作\n);}break;case 7 :state GetHead_LQ(Q,e);if(state PERROR){printf(请确认参数合法化或者先执行队列的初始化操作\n);}else if(state OK){printf(取出队头元素的值为%d\n,e);}else{printf(队列内没有元素不能执行读取队头元素操作\n);}break;}}while(i1i7);return 0;}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Uppy `@uppy/aws-s3` v6 重构深度解析:三种签名模式、对象键覆盖与自定义签名头实战指南 2026/9/30 2:29:34

Uppy `@uppy/aws-s3` v6 重构深度解析:三种签名模式、对象键覆盖与自定义签名头实战指南

前端UI组件后端 【免费下载链接】uppy The next open source file uploader for web browsers :dog: 项目地址: https://gitcode.com/gh_mirrors/up/uppy 点击查看 免费下载 本指南以 uppy/aws-s3 插件的 CHANGELOG.md 为核心骨架,结合仓库源码&#x…

阅读更多 →
MiniGPT-4 训练全流程指南:两阶段对齐(Stage 1 预训练 + Stage 2 微调)从数据准备到实战配置 2026/9/30 2:29:27

MiniGPT-4 训练全流程指南:两阶段对齐(Stage 1 预训练 + Stage 2 微调)从数据准备到实战配置

人工智能大模型多模态计算机视觉NLP微调AI 应用 【免费下载链接】MiniGPT-4 Open-sourced codes for MiniGPT-4 and MiniGPT-v2 (https://minigpt-4.github.io, https://minigpt-v2.github.io/) 项目地址: https://gitcode.com/gh_mirrors/mi/MiniGPT-4 点击查看 免…

阅读更多 →
Nuclei 项目架构与开发指南:从构建测试、模板系统到扫描执行引擎的源码解析 2026/9/30 2:29:21

Nuclei 项目架构与开发指南:从构建测试、模板系统到扫描执行引擎的源码解析

网络安全应用安全漏洞扫描 【免费下载链接】nuclei Nuclei is a fast, customizable vulnerability scanner powered by the global security community and built on a simple YAML-based DSL, enabling collaboration to tackle trending vulnerabilities on the internet. I…

阅读更多 →
XLeRobot 从零搭建指南:17 个舵机、约 $660 预算造出你的双臂家庭移动机器人 2026/9/30 2:29:21

XLeRobot 从零搭建指南:17 个舵机、约 $660 预算造出你的双臂家庭移动机器人

XLeRobot 从零搭建指南:17 个舵机、约 $660 预算造出你的双臂家庭移动机器人 【免费下载链接】XLeRobot XLeRobot: Practical Dual-Arm Mobile Home Robot for $660 项目地址: https://gitcode.com/GitHub_Trending/xl/XLeRobot XLeRobot 是一个开源的双臂家…

阅读更多 →
重打包频频失败?先查 Apktool 的 apktool.yml 四个关键字段 2026/9/30 2:29:21

重打包频频失败?先查 Apktool 的 apktool.yml 四个关键字段

重打包频频失败?先查 Apktool 的 apktool.yml 四个关键字段 【免费下载链接】Apktool A tool for reverse engineering Android apk files 项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool 重打包后的 APK 装到真机,图标丢失、布局空白…

阅读更多 →
我的学习路线 2026/9/30 2:29:21

我的学习路线

我的学习路线 C语言 数据结构 STM32入门教程 尚硅谷STM32 FreeRTOS

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉