IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 小鲤算法C(单链表系列2之创建链表) -> 正文阅读

[数据结构与算法]小鲤算法C(单链表系列2之创建链表)

目录

前言

小鲤碎碎念

创建链表具体操作?

1,创建结点

2,主函数

3,创建链表函数


前言

? ? ? ? ?你掌握了基础知识吗?恭喜你,技能点get+1。但是今天的内容稍有难度,准备好了吗?

小鲤碎碎念

? ? ?单链表的创建方法有尾插法和头插法,每种都有带头节点和不带头节点两种?。今天小鲤主要介绍链表的创建的带头节点的尾插法,是最为简单的。

? ?首先,你得了解单链表是什么形式。假设你是一名地下情报工作人员,你的上线知道你的联系方式,所以他可以找的到你。但是,你没有他的联系方式,所以你找不到他。不过,你也有你的下线的联系方式。这次是你能找的到你的下线,但是你的下线找不到你。但是,如果你非常苦逼,没有下线的话(链表最后一个节点),你就只能靠你的上线来找你了。当然,你足够幸运的话,你没有上线(head头节点),却有一个可以被找到的下线。

(不会被搞😵了吧?那就再看看两遍再继续吧。希望小鲤的讲解够形象)

创建链表具体操作?

?我们这里以创建一个存放学生学号,性别和姓名的链表为例。

1,创建结点

struct link_list
{
	int num;
	char sex[20];
	char name[30];
	struct link_list *next;
};

上一节的必备基础知识3结构体知识用到了吧,这里就不解释了。忘记的感觉回去看一看。

思考🤔

struct link_list *next是什么?拿来干什么的?

😎struct link_list类型指针。是用来联系你下级的。你和你下级(下一个结点)唯一的联系方式就是这个next指针。强调,他只是一个指针,所以不要搞复杂想着他有没有什么成员。初学者易犯!!!

2,主函数

int main(){
 int n;                                                                      //(1)
 scanf("%d",&n);
 struct link_list*head=(struct link_list*)malloc(sizeof(struct link_list));  //(2)
 head->next=NULL;                                                            //(3)
 creat_list(head, n);                                                        //(4)
return 0;
}

先讲主函数吧,上游决定下游。难的放在最后呀。

(1)变量n是我们要创建结点个数;

(2)创建头结点指针。这个指针指向我们申请的struct link_list空间。这个空间的数据域是不存放任何东西的,而这个空间的next指针将会指向第一个结点。

malloc是申请空间函数。(struct link_list*)是类型强制转换。

思考🤔

为啥要申请空间啊,我直接struct link_list*head它不香吗?

😎 上文已经提示过来,他只是指针!!!他没有自己的空间。所以仅仅定义一个struct link_list类型指针是没办法指向成员的。

(3)?思考🤔

head->next为什么要为NULL?

😎NULL的意思是0,事实上,我们直接写0也没有任何问题,但是编译器有时可能会爆。一般而言,NULL经常被使用。NULL即是空。

也就是说为啥要把头指针的next置空呢?道理很简单,这个时候他还没有下线,所以没有联系方式(即指向下一个结点地址),但是我们不给它赋初值会很可怕的,系统会给它分配一个随机地址,此时它也就是我们常说的野指针了,所以如果指针不知道指向谁时,请给它置空。

3,创建链表函数

开始了,开始了,前方高能预警,建议记好笔记(当然笔记是不可能滴,所以就只能点💖了)

老规矩,我们先放代码再讲解。

void creat_list(struct link_list*head,int n){
  struct link_list *p=NULL,*q=head;                                //(1)
  while(n--){                                                      //(2)
  p=(struct link_list*)malloc(sizeof(struct link_list));           //(3)
  if(p){
    q->next=p;                                                     //(4)
	q=p;
  }
  }p->next=NULL;                                                   //(5)
}

是不是出乎意料的少?欸,小鲤其实想看看先前听见小鲤说挺难的之后,有多少人真正为了学知识留下来,嘿嘿

(1)这里我们创建了两个指向struct link_list变量指针,这部分最为重要的就是这两个指针的含义了。

思考🤔

?为什么要定义两个指针,他们是起什么作用呢?

😎两个问题其实在问一个问题,就是两个指针作用。对于p指针来说,它是负责指向一个新的结点的。而q指针是一个临时变量,它负责转交地址。

(2)循环,注意到传入参数的n,代表结点个数。要创建几个结点,就循环多少次。

(3)这里就是申请的内存空间的。每循环一次,创建一个结点,就申请了一个空间。再还没有给它连上主体时,用p指针来记住它。

?(4)这里分几步进行,小鲤手绘了几张图(小鲤手残,勿怪勿怪)

①q->next=p让q的next指向创建的节点。

?这里的空白结点是之前向内存块申请的地址,被p指向。

?①的操作为绿色→,蓝色→为之前的操作。

②让q临时变量指向创建的节点地址。

(5)随时让下一个结点指针域置空。

然后循环操作,直到循环结束。

好啦,创建完成了,赶紧在你的编译器上试一试吧。

小鲤只是一条想要好运的笨鲤鱼o(* ̄▽ ̄*)ブ

今天的内容已经结束了>_<

如果我的文章对你有帮助,不要吝惜你的点赞,小鲤希望得到你的支持?(′?`?)

求三连和关注!!!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:44:08  更:2021-12-24 18:44:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:30:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码