如何理解C语言链表,如何理解c语言链表
C语言链表就是一种数据结构,可以在上面动态的进行传输分配还可以定义节点数据类别或者实现对节点的增删改查等
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的借助。链表可以动态的进行传输分配,也就是说,链表是一个功能极为强大的变量,它可以在结点中定义多种数据类别,还可以按照需要轻易增添,删除,插入节点。接下来将在文章中为你们具体介绍C语言中的链表,希望对你们有所帮助
【推荐课程:C语言教程】
链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和通常节点,头结点是没有数据域的。链表中每个结点都分为两部份,一个数据域,一个是指针域。链表就好似车链子一样,head指向第一个元素:第一个元素既指向第二个元素;……,直到最后一个元素,该元素不再指向其他元素,它称为“表尾”,它的地址部分存放了一个“NULL”(表示“空地址”),链表到此结束。作为有强大功能的链表,对它的操作显然有许多,比如:链表的创建,修改,删除,插入,输出,排序,反序,清空链表的元素,求链表的长度等等。初学链表,一般从单向链表开始
空链表
--->NULL
head
有n个结点的数组
---->[p1]---->[p2]...---->[pn]---->[NULL]
head p1->next p2->next pn->next
创建链表
一般创建泛型我们都用typedef struct,因为这样定义结构体变量时,我们就可以直接可以用LinkList *a;定义结构体类型变量了。
typedef struct student{
int score;
struct student *next;
} LinkList;
初始化一个链表,n为数组节点个数
LinkList *creat(int n){
LinkList *head, *node, *end;//定义头节点,普通节点,尾部节点;
head = (LinkList*)malloc(sizeof(LinkList));//分配地址
end = head; //若是空链表则头尾节点一样
for (int i = 0; i < n; i++) {
node = (LinkList*)malloc(sizeof(LinkList));
scanf("%d", &node->score);
end->next = node;
end = node;
}
end->next = NULL;//结束创建
return head;
}
修改链表节点值
修改链表节点值很简单。下面是一个传入链表和要更改的结点c ++链表,来设置值的函数。
void change(LinkList *list,int n) {//n为第n个节点
LinkList *t = list;
int i = 0;
while (i < n && t != NULL) {
t = t->next;
i++;
}
if (t != NULL) {
puts("输入要修改的值");
scanf("%d", &t->score);
}
else {
puts("节点不存在");
}
}
删除链表节点
删除链表的元素也就是把前节点的指针域跨过要删除的结点指向下下个节点。即:p->next = q->next;然后放出q节点的空间,即free(q);
void delet(LinkList *list, int n) {
LinkList *t = list, *in;
int i = 0;
while (i < n && t != NULL) {
in = t;
t = t->next;
i++;
}
if (t != NULL) {
in->next = t->next;
free(t);
}
else {
puts("节点不存在");
}
}
插入链表节点
我们可以看起来,插入节点就是用插入前节点的指针域链接上插入节点的数据域c ++链表,再把插入节点的指针域链接上插入后节点的数据域。根据图,插入节点也就是:e->next = head->next; head->next = e;
增加递归节点用到了两个结构体指针跟一个int数据。
void insert(LinkList *list, int n) {
LinkList *t = list, *in;
int i = 0;
while (i < n && t != NULL) {
t = t->next;
i++;
}
if (t != NULL) {
in = (LinkList*)malloc(sizeof(LinkList));
puts("输入要插入的值");
scanf("%d", &in->score);
in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
t->next = in;//填充t节点的指针域,把t的指针域重新指向in
}
else {
puts("节点不存在");
}
}
输出链表
输出数组很简单,边遍历边输出就行了
while (h->next != NULL) {
h = h->next;
printf("%d ", h->score);
}
总结:以上就是本篇文章的全部内容了,希望对你们有所帮助。
如何理解C语言链表,如何理解c语言链表相关推荐
- 通过链表深入理解Java的引用和对象
在正式介绍重点内容以前,先给像我这样的初学者强调一下 " = " 在引用和对象应用中的作用: 大致是 " = " 左边是引用," = " 右 ...
- c语言基础深入理解二
指针基础 变量回顾 既然程序中的变量只是一段存储空间的别名 , 那么是不 是必须通过这个别名才能使用这段存储空间 ? 指针本质 ? 指针在本质上也是一个变量 ? 指针需要占用一定的内存空间 ? ...
- 64位程序怎么判断指针是否有效_C 语言指针怎么理解?
注: 看完这篇一定会让你理解透彻指针的本质 是的,这一篇的文章主题是「指针与内存模型」 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不了解的对指针的理 ...
- Go:go语言的认识理解、安装应用、语法使用之详细攻略
Go:go语言的认识理解.安装应用.语法使用之详细攻略 目录 go语言的认识理解 go语言的安装应用 硬件架构 操作系统 开发工具 go语言的语法使用 go语言的认识理解 Go语言是谷歌2009发布的 ...
- 怎么理解python语言_Python语言入门1-理解Python语言
本文主要向大家介绍了Python语言入门的理解Python语言,通过具体的内容向大家展现,希望对大家学习Python语言入门有所帮助. python是解释型的脚本语言 解释型语言 与C/C++等编译型 ...
- 论文浅尝 - ACL2022 | 基于多语言语义解耦表示的跨语言迁移方法实现多语言阅读理解...
论文作者:吴林娟,天津大学,研究方向为自然语言理解 论文链接:http://arxiv.org/abs/2204.00996 代码地址:https://github.com/wulinjuan/SSD ...
- c语言求偶数的积,《动物的多*语言》阅读理解及*
第1篇:<动物的多*语言>阅读理解及* [原文] 动物的多*语言 壬艳坤 1动物也有自已的语言.鸡鸣*吠,虎a猿b,莺c燕d,蝉e虫f--都是动物的语言.这种语言类繁多.千差万别.据说鸟类 ...
- 【C语言】深度理解 负数取余 取模
C语言深度理解 负数取余 取模 关于取余和取模的问题 定义 取余时有负数怎么计算? 取余和取模的区别 取余和取模时候等价什么时候不等价 总结 关于取余和取模的问题 许多小伙伴在刚开始学C语言的时候,知 ...
- HTML语言全称叫超文本标记语言,其中的“标记“如何理解,“超文本”又如何理解?
HTML语言全称叫超文本标记语言,以前一直不明白为什么叫标记语言,最近习惯了使用Markdown书写博客,再结合HTML的作用,发现所谓标记,英文叫 Mark,其实是对内容格式的标记. 所以这里标记的 ...
最新文章
- numpy.random.normal详解
- 配置msf连接postgresql数据库
- 云计算与星辰大海的结合
- android广播示例,android接受开机广播事件
- 如何查看电脑上是否安装有IIS服务
- 扩展GeoServer数据源
- webpack系列之-原理篇
- 公司-ofo:ofo
- 如何批量修改文件夹名称排序?
- 苹果Pro安装win10鼠标不能用的问题
- java用户行为日志记录方法_简单易用的开源用户操作日志记录系统
- 拳王虚拟项目公社:你最重要的事情是什么?
- mybatis-基本架构
- marxico马克飞象
- 2020年全国大学生数学建模竞赛赛题 选题建议
- 打破国外垄断 数字音频国家标准DRA颁布
- 算术编码算法的程序实现
- 软件测试基础教程杜课后,软件测试技术基础教程第2版习题答案
- Java 程序获取本机 ip 地址
- java毕业设计酒店物联网平台系统mybatis+源码+调试部署+系统+数据库+lw