当前位置: 首页 > news >正文

2_单链表

#include <stdio.h> #include <malloc.h> /** * 字符型单链表结构体定义 */ typedef struct LinkNode{ char data; struct LinkNode *next; } LNode, *LinkList, *NodePtr; /** * 初始化链表,创建头结点 * 返回值:指向头结点的指针 */ LinkList initLinkList(){ NodePtr tempHeader = (NodePtr)malloc(sizeof(LNode)); tempHeader->data = '\0'; tempHeader->next = NULL; return tempHeader; }// 初始化链表结束 /** * 打印链表内容 * 参数 paraHeader:链表头结点 */ void printList(NodePtr paraHeader){ NodePtr p = paraHeader->next; while (p != NULL) { printf("%c", p->data); p = p->next; }// 循环结束 printf("\r\n"); }// 打印链表结束 /** * 打印链表及内存地址信息 * 参数 paraHeader:链表头结点 */ void printListMemory(NodePtr paraHeader){ NodePtr p = paraHeader; while (p != NULL) { printf("At address %ld, data = %c, next = %ld \r\n", p, p->data, p->next); p = p->next; }// 循环结束 printf("\r\n"); }// 打印链表内存信息结束 /** * 在链表尾部追加元素 * 参数 paraHeader:链表头结点 * 参数 paraChar:要追加的字符 */ void appendElement(NodePtr paraHeader, char paraChar){ NodePtr p, q; // 1. 创建新结点 q = (NodePtr)malloc(sizeof(LNode)); q->data = paraChar; q->next = NULL; // 2. 找到链表尾结点 p = paraHeader; while (p->next != NULL) { p = p->next; }// 循环结束 // 3. 连接结点,完成追加 p->next = q; }// 尾部追加元素结束 /** * 在指定位置插入元素 * 参数 paraHeader:链表头结点 * 参数 paraChar:要插入的字符 * 参数 paraPosition:插入位置 */ void insertElement(NodePtr paraHeader, char paraChar, int paraPosition){ NodePtr p, q; // 1. 找到插入位置的前一个结点 p = paraHeader; for (int i = 0; i < paraPosition; i ++) { p = p->next; if (p == NULL) { printf("The position %d is beyond the scope of the list.", paraPosition); return; }// 判断位置是否合法 } // 循环结束 // 2. 创建新结点 q = (NodePtr)malloc(sizeof(LNode)); q->data = paraChar; // 3. 连接结点,完成插入 printf("linking\r\n"); q->next = p->next; p->next = q; }// 指定位置插入元素结束 /** * 删除指定元素 * 参数 paraHeader:链表头结点 * 参数 paraChar:要删除的字符 */ void deleteElement(NodePtr paraHeader, char paraChar){ NodePtr p, q; p = paraHeader; while ((p->next != NULL) && (p->next->data != paraChar)){ p = p->next; }// 循环结束 if (p->next == NULL) { printf("Cannot delete %c\r\n", paraChar); return; }// 判断元素是否存在 q = p->next; p->next = p->next->next; free(q); }// 删除元素结束 /** * 追加、插入、删除功能测试 */ void appendInsertDeleteTest(){ // 1. 创建空链表 LinkList tempList = initLinkList(); printList(tempList); // 2. 尾部追加字符 appendElement(tempList, 'H'); appendElement(tempList, 'e'); appendElement(tempList, 'l'); appendElement(tempList, 'l'); appendElement(tempList, 'o'); appendElement(tempList, '!'); printf("After appendElement"); printList(tempList); printListMemory(tempList); // 3. 删除指定字符 deleteElement(tempList, 'e'); deleteElement(tempList, 'a'); deleteElement(tempList, 'o'); printf("After deleteElement"); printList(tempList); printListMemory(tempList); // 4. 指定位置插入字符 insertElement(tempList, 'o', 1); printf("After insertElement"); printList(tempList); printListMemory(tempList); }// 功能测试结束 /** * 结点地址测试 */ void basicAddressTest(){ LNode tempNode1, tempNode2; tempNode1.data = 4; tempNode1.next = NULL; tempNode2.data = 6; tempNode2.next = NULL; printf("The first node: %d, %d, %d\r\n", &tempNode1, &tempNode1.data, &tempNode1.next); printf("The second node: %d, %d, %d\r\n", &tempNode2, &tempNode2.data, &tempNode2.next); tempNode1.next = &tempNode2; }// 地址测试结束 /** * 主函数,程序入口 */ int main(){ appendInsertDeleteTest(); }// 程序结束
http://www.jsqmd.com/news/707482/

相关文章:

  • Youtu-Parsing助力单片机开发:自动解析数据手册与原理图注释
  • 台州黄岩制造业转型新选择,GEO生成式优化助力全域曝光
  • 利用HTML视觉卡片工具构建结构化知识库:从笔记到可视化
  • 谁懂广告人
  • 马哥sre云计算运维第4次作业
  • Real Anime Z部署教程(Mac M2 Ultra):MLX框架适配与Metal加速实测
  • 深度学习图像描述生成技术解析与实践
  • 抖音下载终极解决方案:douyin-downloader完全指南,新手也能轻松上手
  • 信息增益与互信息:机器学习特征选择的核心指标解析
  • 从“听懂”到“干活”:带你了解驾驭工程、提示词工程与上下文工程的核心逻辑
  • 如何快速掌握DownKyi:新手必备的B站视频下载完整指南
  • Z-Image权重注入避坑指南:strict=False模式下100%兼容LM系列
  • 【RA-Eco-RA4M2开发板评测】环境搭建
  • AI智能体安全攻防实战:从提示词注入到纵深防御
  • EmbeddingGemma-300m惊艳效果展示:音乐流派评论语义聚类与用户画像关联分析
  • 拉格朗日乘数法与SVM优化原理详解
  • C++ 手写哈希表(开放定址法 + 链地址法)+ 封装 unordered_map/unordered_set,从原理到工程级实现
  • ARM嵌入式C/C++库架构与优化实践
  • 开源光标主题合集:从原理到实战,打造个性化桌面交互体验
  • Xinference-v1.17.1与Latex集成:AI辅助的学术论文写作系统
  • 多模态AI应用开发实战:从开源工具箱到生产部署全解析
  • 冥想第一千八百六十一天(1861)
  • 快速体验Fairseq-Dense-13B-Janeway:科幻奇幻写作AI助手入门教程
  • MCP低代码集成调试成功率从41%→98.6%:基于137个真实产线案例提炼的7阶渐进式验证模型
  • 从零开始学习 Linux SPI 驱动开发(基于 IMX6ULL + TLC5615 DAC)
  • 【项目实训】——管理员前端页面开发
  • Canvas Quest与3D建模工作流结合:生成贴图与概念设计
  • 世界及中国地震相关数据(2012-2024年)
  • Python单变量函数优化算法与应用实践
  • 虚拟级联技术:运营商网络的带宽优化方案