![9e3fed6d0ba5ac4982961db36cbddfab.png](https://img-blog.csdnimg.cn/img_convert/9e3fed6d0ba5ac4982961db36cbddfab.png)
![679598752899c81cab4cb0cf5a1a55dc.png](https://img-blog.csdnimg.cn/img_convert/679598752899c81cab4cb0cf5a1a55dc.png)
![f1f58a8cb0c4d49c151f723fb82f6ccf.png](https://img-blog.csdnimg.cn/img_convert/f1f58a8cb0c4d49c151f723fb82f6ccf.png)
如何学习数据结构的内容呢?
- 简单介绍对应结构的基本概念。
- 抽象数据类型的介绍。
- 相关代码的实现(这是此公众号写数据结构篇章的意义所在)。
![f1f58a8cb0c4d49c151f723fb82f6ccf.png](https://img-blog.csdnimg.cn/img_convert/f1f58a8cb0c4d49c151f723fb82f6ccf.png)
![7cd5ad4090a84fd71269c039ca670b88.gif](https://img-blog.csdnimg.cn/img_convert/7cd5ad4090a84fd71269c039ca670b88.gif)
线性表简介
![ff40e69b823e5638dfaf483f03dec34f.png](https://img-blog.csdnimg.cn/img_convert/ff40e69b823e5638dfaf483f03dec34f.png)
线性表(linear_list)是最常用且最简单的一种数据结构。它的特点是在有限的非空集合下:
- 每个数据元素都有一个确定的位置。
- 除了第一个数据元素外,集合中的每一个数据元素仅有一个前驱。
- 除了最后一个数据元素外,集合中的每一个数据元素仅有一个后驱。
![19c6dd5e42e0ce93417db1fb09d55b56.png](https://img-blog.csdnimg.cn/img_convert/19c6dd5e42e0ce93417db1fb09d55b56.png)
![7cd5ad4090a84fd71269c039ca670b88.gif](https://img-blog.csdnimg.cn/img_convert/7cd5ad4090a84fd71269c039ca670b88.gif)
抽象数据类型介绍
![ff40e69b823e5638dfaf483f03dec34f.png](https://img-blog.csdnimg.cn/img_convert/ff40e69b823e5638dfaf483f03dec34f.png)
抽象数据类型(ADT)主要是程序中的数据结构的数学模型或者是程序设计语言的数据类型。
这部分内容建议初学者理解就好,不建议深究。
- 数据对象:就是你要操作的数据的最基本的数据类型,可以是一个常量、一个变量、或者结构体等自定义的数据类型。
- 数据关系:数据类型的特点及逻辑关系
- 基本操作:程序所需要去执行的事件。
![19c6dd5e42e0ce93417db1fb09d55b56.png](https://img-blog.csdnimg.cn/img_convert/19c6dd5e42e0ce93417db1fb09d55b56.png)
链表的顺序表示和实现
线性表的链式表示指的是用一组任意的存储单元依次存储线性表的数据元素。
下图提供「顺序表」跟「线性表」的对比图:
![8e61fc30b5dce1edd118b2807ee15a7c.png](https://img-blog.csdnimg.cn/img_convert/8e61fc30b5dce1edd118b2807ee15a7c.png)
线性链表的节点(数据元素)由指针域和数据域组成。
数据域:存储数据元素信息「数据即数据域」
指针域:指向下一个节点(数据元素)「地址即指针域」
如图所示:
![d4650f42bb21170620ade504f76291f2.png](https://img-blog.csdnimg.cn/img_convert/d4650f42bb21170620ade504f76291f2.png)
含头节点链式表示法:
![c89e5d050ae8db9d3858c967258f0dd7.png](https://img-blog.csdnimg.cn/img_convert/c89e5d050ae8db9d3858c967258f0dd7.png)
下面的代码实现了线性表的顺序表示法:
![f4efbebda3bf6cb04cf9fbecf67ca4d5.png](https://img-blog.csdnimg.cn/img_convert/f4efbebda3bf6cb04cf9fbecf67ca4d5.png)
![7ca033f80332856941af41cff3750ddd.png](https://img-blog.csdnimg.cn/img_convert/7ca033f80332856941af41cff3750ddd.png)
![334848ca4a9f146ed0992759284b010e.png](https://img-blog.csdnimg.cn/img_convert/334848ca4a9f146ed0992759284b010e.png)
根据上面的程序,编译结果如下:
![728ffb1f43050d32dca2079b92585771.png](https://img-blog.csdnimg.cn/img_convert/728ffb1f43050d32dca2079b92585771.png)
「数据结构之线性表的链式结构」随笔
![25a181e29b970c342bb11032e06b75be.png](https://img-blog.csdnimg.cn/img_convert/25a181e29b970c342bb11032e06b75be.png)
写「数据结构之线性表的链式结构」主要理解如下的一个结构:
typedef struct LNode
{
int data;
struct LNode* next;
}LNode;
//指向单链表结点的指针
typedef LNode* LinkList;
int InitLink_Sq(LinkList *L);
int ListLength_L(LinkList L);
LinkList *L 是声明了一个指针的指针的结构体。
LinkList *L 指向的是 Linklist,所以创建| 销毁Linklist,使用它。
LinkList L 是声明了一个指针的结构体。
LinkList L 指向的是 Linklist 的结点,所以操作Linklist 「读、写、删、增等时」时,使用它。
![f1f58a8cb0c4d49c151f723fb82f6ccf.png](https://img-blog.csdnimg.cn/img_convert/f1f58a8cb0c4d49c151f723fb82f6ccf.png)
奋斗中的小青年,终生学习者。
![f1f58a8cb0c4d49c151f723fb82f6ccf.png](https://img-blog.csdnimg.cn/img_convert/f1f58a8cb0c4d49c151f723fb82f6ccf.png)