初识链表

目录

初识链表

1.链表的概念及结构

2.单链表

打印

后插

前插

动态申请节点

前删

后删

查找

1.链表的概念及结构

概念:链表是一种 物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。
例:
typedef int SLTDataType;typedef struct SListNode
{SLTDataType data;struct SListNode* next;
}SLTNode;

定义这样一个结构体,就可以完成链表的连接:

从定义和例子中间我们不难总结出:

1、链式结构在逻辑上是连续的,但是在物理上是不连续的,所谓的链,不过是我们构建的理论模型

2、现实中的结点一般都是从堆上申请出来的

3、从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续

2.单链表

链表的种类是很多的,我们先来实现最不复杂的单链表的这几个功能吧

//打印
void SListPrint(SLTNode* phead);
//尾插
void SListPushBack(SLTNode** pphead, SLTDataType x);
//头插
void SListPushFront(SLTNode* pphead, SLTDataType x);
//动态申请一个节点
SLTNode* BuySListNode(SLTDataType x);
//尾删
void SListPopBack(SLTNode** pphead);
//头删
void SListPopFront(SLTNode** pphead);
//查找
void SListFind(SLTNode* phead, SLTDataType x);
//任意位置的插入和删除
void SListInsert(SLTNode** pphead,SLTNode * pos, SLTDataType x);
void SListErase(SLTNode** pphead, SLTNode* pos);
typedef int SLTDataType;typedef struct SListNode
{SLTDataType data;struct SListNode* next;
}SLTNode;

首先我们来个简单的:

打印

我们知道,打印数组是从0下表打印到size下标,那么打印链表呢?我们怎么找到它的各个节点呢?

void SListPrint(SLTNode* phead)
{SLTNode* cur =phead;while (cur != NULL){printf("%d->", cur->data);cur = cur->next;//相当于数组里面的i++}printf("NULL\n");
}

思路:先找到第一个结构体的地址,进而找到首结构体中的next指针,进而找到next指针指向的结构体中的next指针...每次进入一个结构体都将其中的data打印出来,这就是链表的遍历过程的实现

我们再看个难度高的:

后插

我们知道在数组中后插是要考虑扩容和越界的,但是链表和数组不同,他要考虑的是指针所带来的的问题

思路:我们先把要插入的数据x放到一个动态申请的节点里,然后让这个节点的next指向NULL(因为是在最后插入)随后我们找到原链表中的最后一个节点,把这个节点的next指向我们新申请的节点就OK了。

注意:如果这个链表为空,那么首个节点的地址就是个空指针,这个时候我们找不到所谓的最后一个节点,所以这种情况时我们直接把我们申请的节点作为首元素(*phead=STLNode *newnode)

于是,我们有:

void SListPushBack(SLTNode* phead, SLTDataType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));assert(newnode);newnode->data = x;newnode->next = NULL;if (phead == NULL){phead = newnode;}else{     //找尾结点SLTNode* tail = phead;while (tail != NULL){tail = tail->next;}tail->next = newnode;//让原来的NULL指向newnode}
}

但是很遗憾,上面这串代码是纯小丑代码

学习数据结构的第三天相关推荐

  1. 学号 20172326 《程序设计与数据结构》第三周学习总结

    学号 20172326 <程序设计与数据结构>第三周学习总结 教材学习内容总结 队列是先进先出的数据结构(FIFO)与栈不同,队列的两端可分别进行操作 first与front相同,返回首段 ...

  2. 20162329张旭升 2017-2018-2 《程序设计与数据结构》第三周学习总结

    20162329 2017-2018-1 <程序设计与数据结构>第三周学习总结 教材学习内容总结 1.查找 线性查找: (对任意数组)顺序的对数组内的元素一个一个的进行比较,直到找到所查找 ...

  3. 20172305 2017-2018-2 《程序设计与数据结构》实验三报告

    20172305 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 谭鑫 学号:20172305 实验教师:王志 ...

  4. 数据结构稀疏矩阵的加法十字链表_学习数据结构和算法的框架思维

    ----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...

  5. 机器学习理论《统计学习方法》学习笔记:第三章 k近邻法

    机器学习理论<统计学习方法>学习笔记:第三章 k近邻法 3 k近邻法 3.1 K近邻算法 3.2 K近邻模型 3.2.1 模型 3.2.2 距离度量 3.2.3 K值的选择 3.2.4 分 ...

  6. 20172332 2017-2018-2 《程序设计与数据结构》实验三报告

    20172332 2017-2018-2 <程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 于欣月 学号:20172332 实验教师:王 ...

  7. 20172324 2017-2018-2《程序设计与数据结构》实验三报告

    20172324 2017-2018-2<程序设计与数据结构>实验三报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  8. c# 插入数据到 uniqueidentifier_每天5分钟用C#学习数据结构(16)二叉树 Part 2

    [基础知识]| 作者 / Edison Zhou这是恰童鞋骚年的第209篇原创文章 上一篇开始了树与二叉树之旅,本篇会介绍二叉树的基本实现.1二叉树的代码实现 二叉树节点的定义实现 /// /// 二 ...

  9. 数据结构java 图实验代码_20172329 2018-2019 《Java软件结构与数据结构》实验三报告...

    20172329 2018-2019-2 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构>html 班级: 1723java 姓名: 王文彬lin ...

最新文章

  1. .NET中的密码学--对称加密
  2. Asp.net设计模式笔记之一:理解设计模式
  3. 小程序获取form_id 与 小程序获取openid
  4. 僵尸进程孤儿进程与守护进程
  5. matlab im2double
  6. BOM之navigator对象和用户代理检测
  7. anaconda3 安装tensorflow 报Cannot remove entries fro
  8. 动态规划——最优买卖股票时机含冷冻期(Leetcode 309)
  9. 认知觉醒是成长的首因,送3本硬核认知提升书
  10. windows下MongoDB数据库的安装
  11. 如何在Windows即服务上安装Memcached Server
  12. python系统开发_证券交易系统设计与开发
  13. MIT6.S081 2021
  14. 【计算机网络】Socket聊天室程序
  15. CIO40: 2020年IT人员如何借机破局
  16. 做专业领域领航者 佳能正式推出了Professional Print Layout打印软件
  17. arcgis,裁剪投影不一致的矢量和栅格
  18. 电力电子元器件行业研究:市场规模持续增长
  19. 计算几何:正多边形的滚动与旋轮线…
  20. “数据产品”是怎样的存在?

热门文章

  1. php抓取新浪微博数据抓取,php利用curl抓取新浪微博内容实例
  2. Spotmicroai机械狗初上手——组装测试踩坑(二)
  3. C++ 中名称冲突之 y1
  4. java输入坐标_用java语言编写输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离....
  5. Mac文件夹打包成jar
  6. Scrapy-Redis Windows下多台机互联
  7. MPC5748G开发笔记-----LED工程建立
  8. 南昌邀请赛 赛后总结与补题
  9. 图像处理之鱼眼图片矫正
  10. 不甘寂寞农家女一年变千万富婆