一、链式存储的优势

线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低。而链式结构不依赖于地址连续的存储空间,可以克服数组表现线性表的缺陷。

二、基于链式存储线性表的基本操作

2.1 PtrToLNode Creat(int length):创建一个长度为length的线性表

//创建长度为length的链表
PtrToLNode Creat(int length)
{PtrToLNode pHead = (PtrToLNode)malloc(sizeof(struct LNode));//链表头PtrToLNode p0 = pHead;//新创建链表节点地址PtrToLNode p1 = pHead;//链表尾节点地址p0->Data = 0;int i = 1;for (i = 1; i < length; i++){p0 = (PtrToLNode)malloc(sizeof(struct LNode));p0->Data = i;p1->pNext = p0;//新创建节点的首地址是上一节点的pNextp1 = p0;//更新尾节点}p1->pNext = NULL;//最后有一个节点的pNext为NULLreturn pHead;
}

2.2 int Length(PtrToLNode ptr):求表头为ptr的链表的长度

//求表长
int Length(PtrToLNode ptr)
{int len = 0;while (ptr != NULL){len++;ptr = ptr->pNext;}return len;
}

3.3 int FindKth(PtrToLNode ptr, int n):求表头为ptr的链表第n个结点的Data值

//求第n个结点的Data
int FindKth(PtrToLNode ptr, int n)
{if (n > Length(ptr)){printf("该节点不在链表范围内");system("pause");return -1;}int i = 1;for (i = 1; i < n; i++){ptr = ptr->pNext;}int result = ptr->Data;return result;
}

3.4 int Find(PtrToLNode ptr, int num):求表头为ptr的链表中第一个Data值为num的节点的序号

//求链表中第一个Data值为num的节点的序号
int Find(PtrToLNode ptr, int num)
{int n = 1;//序号从1开式计while (ptr->Data != num && n <= Length(ptr)){n++;ptr = ptr->pNext;}if (n > Length(ptr)){printf("该链表内无Data为%d的节点\n", num);system("pause");return -1;}return n;
}

3.5 PtrToLNode Insert(PtrToLNode ptr, int n, int num):在第n个节点处插入Data值为num的节点

//在第n个节点处插入Data值为num的节点
PtrToLNode Insert(PtrToLNode ptr, int n, int num)
{PtrToLNode head = ptr;if (n > Length(ptr) + 1){printf("请重新输入插入位置");system("pause");return NULL;}if (n == 1)//n=1即插入新的表头{PtrToLNode pNewHead = (PtrToLNode)malloc(sizeof(struct LNode));pNewHead->Data = num;pNewHead->pNext = ptr;return pNewHead;}int i = 1;for (i = 1; i < n-1; i++)//找出第n-1个节点的首地址{ptr = ptr->pNext;}PtrToLNode pTem = ptr->pNext;PtrToLNode pNew = (PtrToLNode)malloc(sizeof(struct LNode));pNew->Data = num;ptr->pNext = pNew;pNew->pNext = pTem;return head;
}

3.6 PtrToLNode Delete(PtrToLNode ptr, int n):删除第n个节点

//删除第n个节点
PtrToLNode Delete(PtrToLNode ptr, int n)
{PtrToLNode head = ptr;if (n > Length(ptr)){printf("请重新输入删除位置");system("pause");return NULL;}if (n == 1){PtrToLNode pNewHead = ptr->pNext;free(ptr);//注意将删除的节点free掉return pNewHead;}int i = 1;for (i = 1; i < n - 1; i++)//找出第n-1个节点的首地址{ptr = ptr->pNext;}PtrToLNode pTem = (ptr->pNext)->pNext;free(ptr->pNext);ptr->pNext = pTem;return head;
}

注:本程序中节点序号都是从1计起

转载于:https://www.cnblogs.com/HL-space/p/10546596.html

C 线性表的链式存储实现及插入、删除等操作示例相关推荐

  1. 数据结构和算法:(3)3.2线性表的链式存储结构

    线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...

  2. 链表list(链式存储结构实现)_5 线性表的链式存储结构

    系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...

  3. JAVA数据结构 线性表的链式存储及其实现

    2019独角兽企业重金招聘Python工程师标准>>> 2线性表的链式存储及其实现 虽然顺序表具有随机存取的特点是一种有用的存储结构但是也有缺陷: (1)      若需要给顺序表增 ...

  4. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  5. C和C++线性表的链式存储

    C和C++线性表的链式存储 基本概念 链表技术领域推演 设计与实现 重要技术场景图 链表链式存储_插入 链表链式存储_删除 优点和缺点 基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间 ...

  6. 【数据结构】线性表的链式存储-单链表

    单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后 ...

  7. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)

    线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...

  8. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  9. 数据结构开发(5):线性表的链式存储结构

    0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...

  10. 数据结构第三篇——线性表的链式存储之单链表

    ♥注:未经博主同意,不得转载. 线性表的链式存储结构的特点是用一组任意的存储单元来存储线性表的数据元素,这些单元可以分散在内存中的任意位置上,其在物理上可以是连续的,也可以是不连续的.具有链式存储结构 ...

最新文章

  1. 干货|100张PPT讲透工业机器人的机械结构
  2. VUE el-input正则验证
  3. Spring之Bean的配置(一)
  4. java反射随意值_Java反射笔记
  5. GZIP pre-compression
  6. 使用GNOME桌面工具管理Linux(4)–服务的使用
  7. Spring Cloud笔记-Maven构建父子项目
  8. ubuntu-18.04 设置开机启动脚本-亲测有效
  9. 一定要吃透的四个人性真相
  10. linux---动静态库编译及使用
  11. Docker容器资源管理
  12. js格式化显示xml
  13. 数学建模英文论文写作
  14. web测试的基本测试点
  15. java-学生管理系统源代码
  16. 转载 CSDN 谈谈我对证券公司一些部门的理解(前、中、后台)
  17. 数字电路设计:竞争冒险以及消除方法
  18. xpath定位元素详解
  19. 常用无损压缩算法原理简析
  20. 英特尔 11 代酷睿桌面酷睿 i9-11900K登场

热门文章

  1. DHCP协议++ClientServer架构
  2. vue 交互 HTML,Vue 自定义元素交互
  3. ZeroMQ -- 四种模型简介
  4. go语言及etcd环境搭建
  5. Mac设置VMARE FUSION虚拟机网卡
  6. 小程序开发合同_微信小程序怎么做?微信小程序制作流程? | 微信开放社区
  7. [渝粤教育] 武汉科技大学 证券投资学 参考 资料
  8. 【渝粤教育】国家开放大学2018年春季 0176-21T电机学(一) 参考试题
  9. 教你如何修改运行中的docker容器的端口映射
  10. 使用 redis 减少 秒杀库存 超卖思路 (转)