说明:严蔚敏的《数据结构》(C语言版)学习笔记,记录一下,以备后面查看。

#include <stdio.h>
#include <malloc.h>const int OK = 1;  //定义正确返回
const int ERROR  = -1;  //定义错误的返回
const int OVERFLOW = -2; //定义溢出//定义元素类型
typedef int ElemType;
//定义返回类型
typedef int Status;typedef struct LNode{ElemType data;struct LNode *next;
}LNode, *LinkList;//获取第i个元素(L为带头结点的单链表的头指针)
Status GetElem_L(LinkList L, int i, ElemType &e){LinkList p = L->next; //L->next指向头结点int j = 1;while(p&&j<i){p = p->next;++j;}if(!p || j>i) return ERROR;e = p->data;return OK;
}//插入元素(第i个位置之前插入元素)
Status ListInsert_L(LinkList L, int i, ElemType &e){LinkList p = L; //头结点int j = 0;while(p && j<i-1){p = p->next;++j;}if(!p || j>i-1) return ERROR;LinkList s = (LinkList)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;return OK;
}//删除第i个元素
Status ListDelete_L(LinkList &L, int i, ElemType &e){LinkList p = L; //p指针指向头结点int j = 0; while(p && j<i-1){p = p->next;++j;}if(!p || j>i-1) return ERROR;LinkList s = p->next;p->next = s->next;e = s->data;free(s);return OK;
}//创建链表,并添加n个数据结点
void CreateList_L(LinkList &L, int n){L = (LinkList)malloc(sizeof(LNode));L->next = NULL;  //创建一个带头结点的单链表int i;LinkList p;for(i=n;i>0;--i){p = (LinkList)malloc(sizeof(LNode));printf("请输入链表第%d个元素的数据:\n", i);scanf("%d", &p->data);p->next = L->next; //头插法L->next = p;}
}//遍历链表
void ShowList_L(const LinkList &L){LinkList p = L->next;int j = 1;while(p){printf("链表的第%d个元素是%d\n", j, p->data);p = p->next;++j;}
}int main(){LinkList L;printf("============创建5个数据结点============\n");CreateList_L(L, 5);ShowList_L(L);printf("============删除了第5个元素============\n");ElemType e;ListDelete_L(L, 5, e);ShowList_L(L);printf("============添加第5个元素=============\n");ListInsert_L(L, 5, e);ShowList_L(L);scanf("%d");return 0;
}

部分说明:

1、第i个元素之前插入元素

如上图所示,假如现在有4个元素,那么有四个可选插入位置(①②③④):

让p先指向头结点,我们需要找到第i-1个结点,也就是需要插入位置的前一个结点,比如我们要插入到i=3,那么需要找到2位置,插入到③位置。

转载于:https://www.cnblogs.com/lanzhi/p/6468673.html

数据结构——动态链表相关推荐

  1. 《算法思维——一种问题驱动的思维方式》之第5篇:数据结构之动态链表篇——采用C++编程语言实现

    <算法思维--一种问题驱动的思维方式>之第5篇:数据结构之动态链表篇--采用C++编程语言实现 在数据结构的学习中,链表是动态数据结构的最基本的形式,也是最常见的一种线性数据结构,使用范围 ...

  2. c语言动态链表creat函数,用create建立动态链表

    写一个函数create,用了建立一个动态链表 #include using namespace std; struct LINK { int num; char a[20]; char b[20]; ...

  3. python链表的创建_python数据结构之链表的实例讲解

    在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体 管理和使,需要创建这种元素组,变量记录它们,传进传出函数等. 组数据中包含的元素个数可能发变化(可以增加或删除元素). 对于这种需求,最 ...

  4. python链表值讲解_python数据结构之链表的实例讲解

    在程序中,经常需要将⼀组(通常是同为某个类型的)数据元素作为整体 管理和使⽤,需要创建这种元素组,⽤变量记录它们,传进传出函数等. ⼀组数据中包含的元素个数可能发⽣变化(可以增加或删除元素). 对于这 ...

  5. 大一新生必看,自学必看,里昂详解数据结构之链表

    数据结构之链表 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...

  6. 搬砖:数据结构之链表基本操作总结

    数据结构之链表基本操作总结 2017年05月11日 18:22:11 Lily_whl 阅读数:19151 https://blog.csdn.net/Lily_whl/article/details ...

  7. 数据结构 —— 单链表(超详细图解 接口函数实现)

    系列文章目录 数据结构 -- 顺序表 数据结构 -- 单链表 数据结构 -- 双向链表 数据结构 -- 队列 数据结构 -- 栈 数据结构 -- 堆 数据结构 -- 二叉树 数据结构 -- 八大排序 ...

  8. python链表值讲解_python数据结构之链表详解

    python数据结构之链表详解 数据结构是计算机科学必须掌握的一门学问,之前很多的教材都是用C语言实现链表,因为c有指针,可以很方便的控制内存,很方便就实现链表,其他的语言,则没那么方便,有很多都是用 ...

  9. python链表详细教程_详细介绍python数据结构之链表

    这篇文章主要为大家详细介绍了python数据结构之链表的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 数据结构是计算机科学必须掌握的一门学问,之前很多的教材都是用C语言实现链表,因为c有 ...

最新文章

  1. linux中-i选项的作用,linux – find中的-prune选项有什么作用?
  2. 阿里云centos 7.6安装mysql_阿里云服务器中Linux下centos7.6安装mysql8.0.11
  3. nginx php 配置请求等待时间_CVE-2019-11043: PHP-FPM在Nginx特定配置下任意代码执行漏洞预警...
  4. 【数据结构-图】1.图的构造和遍历(基本理论+代码)
  5. Codeforces 1264C/1265E Beautiful Mirrors with queries (概率期望、DP)
  6. Verilog MIPS32 CPU(一)-- PC寄存器
  7. 三种CSS样式的引用方式
  8. 数据挖掘–聚类思维导图
  9. PyTorch 1.0 中文官方教程:使用 PyTorch 进行图像风格转换
  10. web监听器监听mysql_JavaWEB开发15——ListenerListener
  11. 手机/邮箱等帐号判断
  12. IOS图标icon,png去掉高光效果
  13. C++ 命名方式建议
  14. 剑指Offer_42_和为S的两个数字
  15. Linux双系统安装指南
  16. Java二:计算机语言发展进程 以及 JAVA的发展、特性、版本介绍
  17. 蚂蚁金服校招一面有感
  18. python数据分析与应用pdf_看了Python在金融行业中的应用,大数据分析实在太重要了!...
  19. 如何安装java环境_如何安装java环境变量
  20. 智慧交通:地铁站 3D 可视化,车路协同赋能科学出行

热门文章

  1. 你知道IT行业里哪种岗位女生最多吗?
  2. 作为一名大厂的测试人员,软件测试真的是一份低调的工作吗?
  3. shell脚本ssh登录并执行命令_Linux批量免密码SSH登录案例
  4. Arbin数据导出---cellpy库的安装与使用
  5. DE 32: Limit Cycles
  6. 无法解析的外部符号 __imp__glewinit
  7. 计算机视觉基础:图像处理 Task 03 - 颜色空间互转
  8. 同样是机器学习算法工程师,你的面试为什么过不了?
  9. android自定义矩形框,Android中ImageCropper矩形、圆形 裁剪框的实现方法
  10. 计算机三级上机考试题库,计算机三级数据库上机试题及答案