在讲述链表之前让我们对数据结构进行一个简单的回顾:我们知道,数据结构指的是描述实际问题中各个数据项节点之间的前后逻辑结构关系,即要么是线性结构(即某一数据项的前继节点和后继节点有且只有一个)要么是非线性结构(即某一数据节点的前驱或者后继节点不止一个)。在确定了实际数据项的数据结构之后,我们要采用某种存储方式对其进行存储,常见的数据结构的存储方式有:顺序存储、链式存储、散列存储以及索引存储。每一种存储方式都有一个基础数据结构与其对应,如数组是顺序存储的基础数据结构,链表是链式存储基础数据结构等等。所以彻底理解了链表也即会非常容易的理解其他基于链式存储的数据结构。

链表:根据指针域的不同,链表分为单向链表、双向链表、循环链表等等。

单向链表是链表中最简单的,每个元素包含一个指针域和一个数值域,我们称这样的元素为一个节点,每个节点用来存储实际数据中的一个数据项,每个节点的指针域指向下一个节点,最后一个指向一个空值。即一个单项链表的一个节点分为两个部分,第一部分保存或者显示关于节点的信息,第二部分存储下一个节点的地址,单链表只能向一个方向进行遍历。下面我们来具体实现一个单链表:
首先我们要定义一个节点,用于保存数据项的各项信息:

typedef Node
{int data;Node * pNextNode;
}linkNode;

生成一个包含nCount个节点的链表:

linkNode* createLink(int nCount)//尾插法
{linkNode *pHeadNode = malloc(sizeof(linkNode));linkNode * p = null;for(int i = 0; i<nCount; i++){p = malloc(siezof(linkNode))p->data = i;pHeadNode->next = p;pHeadNode = p;}p->next = null;return pHeadNode
}

删除链表某一个节点:

linkNode * deleteNode(linkNode * pHeadNode, int theData)
{while(pHeadNode->data==theData)//判断链表头结点是否是需要删除的节点{pHeadNode= pHeadNode->next;if(pHeadNode== null) return null;}while(pHeadNode->next!=null){if(pHeadNode->next->data==theData)pHeadNode->next = pHeadNode->next->next;elsepHeadNode = pHeadNode->next; }return pHeadNode;
}

查找链表中包含某一元素的节点

linkNode* searchNode(linkNode *pHeadNode, int theData)
{while(pHeadNode->data==theData)return pHeadNode;while(pHeadNode->next!=null && pHeadNode->data!=theData)pHeadNdoe = pHeadNode->next;return pHeadNode;
}

在链表中,在pos位置增加一个元素:

linkNode* addNode(linkNode* pHeadNode, int pos, int number)
{for(int i = 0; i<pos; i++){pHeadNode = pHeadNode->next;}linkNode* theAddNode = malloc(sizeof(linkNode));theAddNode->data = numbertheAddNode->next = pHeadNode->next;pHeadNode->next = theAddNode;
}

链表的遍历

void printLink(linkNode* pHeadNode)
{if(pHeadNode==null)return;while(pHeadNode->next!=nul)pHeadNode = pHeadNode->next;
} 

到此我们完成了单向链表的一部分功能,当然代码不是特别完善,所以我会不定时更新完善这部分。当然还有双向链表和循环链表等,但在此就不一一介绍了,后面有需要的会补上来的。

数据结构与算法-链表相关推荐

  1. JavaScript数据结构与算法——链表详解(下)

    在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...

  2. JavaScript数据结构与算法——链表详解(上)

    注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...

  3. 数据结构与算法--链表实现以及应用

    数据结构与算法–链表实现以及应用 链表是面试时候使用最频繁的一种数据结构.链表的结构简单,他由指针将若干个节点链接成链状结构.链表的创建,插入,删除,查询操作都只有几行代码可以完成,代码量比较少,可以 ...

  4. 数据结构与算法-链表学习笔记

    数据结构与算法-链表学习笔记 链表的概念 链表是有序的列表. 链表是以节点的方式来存储,是链式存储,它在内存中并不是一定是连续的. 每个节点包含 data 域:存储数据, next 域:指向下一个节点 ...

  5. 数据结构与算法 -- 链表

    一.链表介绍 1.链表有地址不连续的结点序列,必须通过指针相互连接. 2.链表的分类: (1)单向线性链表 每个节点中除了存储数据结构内容以外,还需要保存指向下一个节点的指针,叫做后指针.最后一个节点 ...

  6. 数据结构与算法 —— 链表linked list(01)

    链表(维基百科) 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储, ...

  7. 数据结构与算法-链表篇

    链表与数组不同,是在物理空间中非连续的,依靠前一个节点记录下一个节点的地址进行连接的一种数据结构. 链表中每个节点存储的内容为当前节点和下个节点的指针. 链表一般分为三种 1.单向链表 2.双向链表 ...

  8. 数据结构和算法-链表

    链表分类 单向链表 双向链表 优势: 删除某个节点更加高效, 可以快速找到前驱节点 可以方便的在某个节点前插入元素 循环链表 当要处理的数据具有环形结构的时候, 适合循环链表. 如约瑟夫环问题 双向循 ...

  9. 数据结构与算法 | 链表

    链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 对于表,图,栈,队列,树等数据结构,我们采用链式和顺序结构都可以实现. 而链表又分为很多种,这一 ...

最新文章

  1. PHP使用BC Math 函数处理浮点运算问题
  2. SQL Server 2019安装教程
  3. 汇编解析(4)-BIOS
  4. css 样式三元运算_CSS扩展语言——Sass入门指南
  5. php mysql-proxy报错_MySQL-proxy代理导致PHP PDO::ATTR_EMULATE_PREPARES的预处理出错,MySQL报General error: 1243错误...
  6. LeetCode206 | Reverse Linked List (Easy)
  7. 设计一个处理两种类型地址的地址簿程序_短信平台的API接口都有哪些类型?
  8. 万圣节海报设计没有思路?看看这些有趣的万圣节狂欢是如何完成的!
  9. 7-1 抓老鼠啊~是亏了还是赚了?
  10. System.Data.Entity.Core.MetadataException:“Unable to load the specified metadata resource.”
  11. 港股互联网券商系统建设
  12. JAVA练习——集合练习题(HashSet,TreeSet)产生随机数不能重复,去掉重复元素,将集合中重复元素去掉,字符串倒序输出,倒序输出整数,倒序排列对象
  13. Vue项目使用SSR服务器渲染
  14. MongoDB LBS经纬度查询操作
  15. 装满了自我提升的33个学习平台
  16. 【办公-excel】Excel批量翻译
  17. ps制作浮雕和投影效果
  18. android bea拷贝,从Android开发中学到一些东西
  19. hbase region in transition
  20. flow hive 新型蜂箱_流动的蜂蜜盛宴:Flow Hive蜂箱获数百万美元众筹款

热门文章

  1. 给JSP页面加过滤器
  2. html编辑四则运算,简单的web四则运算计算器
  3. java四则运算器算法_java写的四则运算器
  4. 基于Xml 的IOC 容器-创建容器
  5. 【技术改造】电商系统用户模块集成Feign-2
  6. 设计 Redis Key
  7. 对象的反序列化流_ObjectInputStream
  8. 后台服务系统之编写服务提供方实现
  9. 数据库-关系代数的分类
  10. if语句和缩进部分是一个完整的代码块