线性表--链表

复制代码
基本操作:
#include
<iostream> using namespace std; typedef struct LNode *List; struct LNode { int Data; List next; }; struct LNode L; int length(List PtrL)//求表长 { List p = PtrL; int j = 0; while (p) { p = p->next; j++; } return j; } List FindKth(int K, List PtrL)//按K的查找 { List p = PtrL; int i = 1; while (i < K&&p != NULL) { p = p->next; i++; } if (i == K)return p; else return NULL; } List Find(int X, List PtrL)//按值查找 { List p = PtrL; while (p != NULL && p ->Data != X) { p = p->next; } return p; } List Insert(int X, int i,List PtrL)//插入操作 { List p, s; if (i == 1) { s = (List)malloc(sizeof(struct LNode)); s->Data = X; s->next = PtrL; return s; } p = FindKth(i - 1, PtrL); if (p == NULL) { cout << "参数i错误" << endl; return NULL; } else { s = (List)malloc(sizeof(struct LNode)); s->Data = X; s->next = p->next; p->next = s; return PtrL; } } List Delete(int i, List PtrL) { List p, s; if (i == 1) { s = PtrL;//s指向第一个结点 if (PtrL != NULL) { PtrL = PtrL->next; } else return NULL; free(s);//释放被删除的结点 return PtrL; } p=FindKth(i - 1, PtrL); if (p == NULL) { cout << "这个结点不存在" << endl; return NULL; } else if (p->next == NULL) { cout << "不存在" << endl; return NULL; } else { s = p->next;//s是需要被删除的结点 p->next = s->next; free(s); return PtrL; } } //广义链表 typedef struct GNode *GList; struct GNode { int tag;//0表示结点是单元素,1表示广义表 union { int Data; GList sublist; } UGegion; GList Next; }; /* 多重链表 双向链表不是多重链表 树图都可以用多重链表用来存储 十字链表存储稀疏矩阵 只存储非0元素 行坐标Row 列坐标Col 值 行指针(向右指针) 列指针(向下指针)同行同列穿起来 */
复制代码

 

posted @   Tomorrow1126  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示