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

循环单链表

// // Created by Administrator on 2026/3/28. // #include <stdio.h> #include <stdlib.h> typedef int ElemSet; // 单循环链表结点定义 typedef struct CNode { ElemSet data; struct CNode *next; } CNode, *CLinkList; // 创建空的单循环链表(带头结点) CLinkList CreateCList() { CLinkList L = (CLinkList)malloc(sizeof(CNode)); if (!L) { printf("内存分配失败!\n"); exit(1); } L->next = L; // 头结点指向自身,形成闭环 return L; } // 头插法:在头结点后插入元素 void CListInsert(CLinkList L, ElemSet x) { CNode *new_node = (CNode*)malloc(sizeof(CNode)); if (!new_node) return; new_node->data = x; new_node->next = L->next; L->next = new_node; } // 尾插法:在链表末尾插入元素 void CListInsertTail(CLinkList L, ElemSet x) { CNode *p = L; while (p->next != L) { // 找到尾结点 p = p->next; } CNode *new_node = (CNode*)malloc(sizeof(CNode)); new_node->data = x; new_node->next = L; p->next = new_node; } // 教材算法:从start结点开始遍历循环链表 void Visit(CNode *p) { printf("%d ", p->data); } void CListTraverse(CNode *start) { if (!start) return; CNode *p = start; // 记录头结点(start 的前一个就是头结点 L) CNode *head = start; while (head->next != start) { head = head->next; } do { Visit(p); p = p->next; } while (p != head); // 到了头结点就停止 printf("\n"); } // 删除指定结点的后继 void CListDeleteNext(CNode *p) { if (p->next == p) return; // 空表 CNode *del = p->next; p->next = del->next; free(del); } // 销毁循环链表 void DestroyCList(CLinkList L) { CNode *p = L->next; while (p != L) { CNode *temp = p; p = p->next; free(temp); } free(L); } // 循环链表测试 int main() { CLinkList L = CreateCList(); // 插入测试 CListInsertTail(L, 10); CListInsertTail(L, 20); CListInsertTail(L, 30); printf("遍历链表:"); CListTraverse(L->next); // 输出:10 20 30 // 删除测试 CListDeleteNext(L->next); // 删除10的后继(20) printf("删除后:"); CListTraverse(L->next); // 输出:10 30 DestroyCList(L); return 0; }

空链表即头指针指向自己。

插入的位置已经不重要了,因为从任何节点出发都能遍历一遍链表。

http://www.jsqmd.com/news/554030/

相关文章:

  • 最佳数据科学家总是持续学习
  • 2026高端晾衣架怎么选?十大品牌选购指南来了! - 匠言榜单
  • 连云港市区本地人推荐的特色家常铁锅炖餐厅
  • 超越跑分:Gemini 3.1 Pro 2026年多维度能力评估体系深度拆解
  • 斯坦福-CS253-网络安全笔记-全-
  • 如何快速掌握Mesa:Python多智能体建模的完整指南
  • 百川2-13B微调实践:为OpenClaw定制专属的自动化指令集
  • OpenClaw技能市场巡礼:Qwen3-32B适配度最高的5个工具
  • 上海地区好用的精密过滤器供应商有推荐的吗 - myqiye
  • 公众号排版别乱堆样式!抓住这几个要点,新手也能做出高级感 - 小小智慧树~
  • React Native PagerView入门指南:5分钟快速搭建页面切换组件
  • 公众号排版教程丨巨详细!用这个编辑器三分钟教会你公众号排版 - 小小智慧树~
  • 斯坦福-CS261-网络优化笔记-全-
  • 深入解析CAN总线通信原理与CANoe实战开发指南
  • SUNFLOWER MATCH LAB与SolidWorks集成展望:植物三维模型检索与匹配
  • 从零到一:基于LangFlow、Ollama与Neo4j的本地知识图谱问答系统搭建实录
  • 2026年北京地区知名护栏网品牌排名,靠谱的小区护栏网制造商有哪些 - 工业设备
  • 2026南京手表售后全攻略|高端奢华腕表维修科普+六城正规网点汇总 - 时光修表匠
  • 从iRMB到EMO:构建下一代轻量级密集预测模型的统一架构解析
  • 玄机——从钓鱼邮件到内网沦陷:一次完整攻击链的深度溯源分析
  • Qwen3-VL-2B为何选CPU优化?低门槛部署实战解读
  • 2026和你一起品味实力强的过滤机品牌,江浙沪哪家口碑好 - mypinpai
  • 中山湘菜馆价格多少,靠谱的优质品牌怎么选 - mypinpai
  • 智能模型的秘诀-跟踪特征历史
  • 斯坦福-AA228V-安全关键系统验证笔记-全-
  • 告别底噪和发热:TPA3255的PCB布局与散热设计保姆级教程(附嘉立创EDA文件)
  • Ostrakon-VL-8B效果展示:AI识别货架商品、检查消防通道真实案例
  • AI Agent操作系统架构师:Harness Engineer解析
  • 为什么 PHP 闭包要加 static?
  • Display Driver Uninstaller完全指南:解决显卡驱动残留的系统级清理方案