本篇主要记录笔者对C语言的链表,基础的排序算法,如 选择,冒泡等排序的算法的笔记,如有错误欢迎指正!
目录
2.每个节点包含两个部分:数据元素和指向下一个节点的指针/引用。
3.链表中的节点不必在内存中连续存储,它们通过指针相互连接。如图
5.最后一个节点称为尾节点,尾节点指向一个特殊的空节点(通常表示为null、None或nil)C语言中为NULL,表示链表的末尾。
6.链表的构成方式和节点之间的连接关系可以有多种不同的形式,但最常见的类型是单向链表和双向链表。
单向链表(Singly Linked List):每个节点只有一个指针,指向下一个节点。最后一个节点的指针指向空。
双向链表(Doubly Linked List):每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。头节点的前指针和尾节点的后指针都指向空。
首先第一步,新建一个结构体 struct (定义关键字) student (类型名) 像这样的
1.链表增加,动态链表,动态链表分为两个插入方法,头插法和尾插法。
首先介绍链表是什么
1.链表是一种线性数据结构,由一系列节点组成。例如
struct student {
int age;
struct student *next;
};
2.每个节点包含两个部分:数据元素和指向下一个节点的指针/引用。
{
//第一部分 int age 这部分是数据元素
int age;
//第二部分 struct student *next 这部分是指向下一节点的指针
struct student *next;
}
3.链表中的节点不必在内存中连续存储,它们通过指针相互连接。如图
内存中是 : 00001000010001100 并不是 11111111111111111111 存储
通过指针 1 <--------> 1 <--------> 1 <-------->1连接起来的就像一个个的钩子挂在一起产生的关系
4.链表中的第一个节点称为头节点,
头结点是十分重要的概念,头结点是链表的起始,如上图的*head,由于是单向的链表,根据概念来说他从左往右只能用next。并且方向是单向的
5.最后一个节点称为尾节点,尾节点指向一个特殊的空节点(通常表示为null、None或nil)C语言中为NULL,表示链表的末尾。
6.链表的构成方式和节点之间的连接关系可以有多种不同的形式,但最常见的类型是单向链表和双向链表。
-
单向链表(Singly Linked List):每个节点只有一个指针,指向下一个节点。最后一个节点的指针指向空。
+---+ +---+ +---+ +---+ | 1 | -> | 2 | -> | 3 | -> | | +---+ +---+ +---+ +---+
-
双向链表(Doubly Linked List):每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。头节点的前指针和尾节点的后指针都指向空。
+---+ +---+ +---+ +---+ | | <- | 1 | <-> | 2 | <-> | 3 | +---+ +---+ +---+ +---+
---------------------------------------------分界线---------------------------------------------------------------
! 本次介绍并不涉及双向链表,仅涉及单向的链表
链表在C语言中如何开始使用
首先第一步,新建一个结构体 struct (定义关键字) student (类型名) 像这样的
struct student {
//定义他的参数
int age ;
struct student *next;
//定义指向下一节点的指针变量 ,类型为定义的student 结构体
};
然后开始写自定义函数完成需求,链表的增删改查
1.链表增加,动态链表,动态链表分为两个插入方法,头插法和尾插法。
两种方法都可以具体想象为挂东西的方式,一个把head当第一个,依次在head前面挂钩一个,另一个尾插法更符合现实生活中挂东西成线的方式,即是把head当成第一个挂的参照 head的下一个(next)就与新挂上来的钩子放在一起,接着新挂上来的就作为第一个,两者仅参照对方,交换一个位置后继续挂...
头插法
尾插法
2.链表的删除
链表的删除原理十分的简单,转化为现实问题,链子需要解除其中一环是如何操作的呢,首先是,选定一下我要解除哪一环呢,如果选定了我要取环有生锈的这一点突出 的,我们选择它以后就开始吧连接这个环前面,后面的环掰开成为三部分,第一部分是掰开的一条left 第二部分是掰开的环flag单个的,第三部分是掰开的一条right,掰开的环我们就不要了 只用管剩下的两部分 left 和 right ,我们该如何把他合上呢,首先就是left 掰开然后right掰开,把他们和在一起就是一个删除指定元素的链表了,怎么样是不是很清晰,我们看代码
3.链表的查询
链表的查询是一个顺序的查询十分简单直接看代码
4.链表的改写
链表的改写逻辑是存在查找的基础上的,首先查找到指定节点元素,定位成功后,指向该元素重新赋值
提到常用的排序算法我这里提供两种算法:
1.冒泡排序:
基本介绍,冒泡排序是两两依次比较,通过大于小于( ' < ' 或者 ' >' )来控制顺序逆序的一种排序方法,这里不讲原理只说代码
2.选择排序:
选择排序不同的是他需要在内层先记录下下标,再再外层循环将他们交换进而实现排序,也要注意比较的次数不能出现溢出 ,查找了未定义的数据极有可能出现一个完全没有的数字在结果里面并且没有报错 ,对初学者来说需要注意!
结尾
C语言是十分经典的一门语言在学习最近几年较新的技术栈时,也要记得回头看最基础的内容,程序=算法+数据结构 锻炼我们的思维能力!