前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言链表实例--玩转链表

C语言链表实例--玩转链表

作者头像
用户6754675
修改于 2020-10-20 02:59:02
修改于 2020-10-20 02:59:02
2.1K00
代码可运行
举报
文章被收录于专栏:嵌入式单片机嵌入式单片机
运行总次数:0
代码可运行

下图为最一简单链表的示意图:

第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 name,性别 sex 和成绩 score 等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。

指针域: 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。

在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为 0。这样一种连接方式,在数据结构中称为“链表”。

而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现

例如:每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点。

一个存放学生学号和成绩的结点应为以下结构:

struct stu

{ int num;

int score;

struct stu *next;

}

前两个成员项组成数据域,后一个成员项 next 构成指针域,它是一个指向 stu 类型结构

的指针变量。

链表的基本操作对链表的主要操作有以下几种:

1. 建立链表;

2. 结构的查找与输出;

3. 插入一个结点;

4. 删除一个结点;

建立一个三个结点的链表,存放学生数据。为简单起见, 我们假定学生数据结

构中只有学号和年龄两项。可编写一个建立链表的函数 creat。程序如下:

#define NULL 0

#define TYPE struct stu

#define LEN sizeof (struct stu)

struct stu //定义结点结构

{

int num;

int age;

struct stu *next;//指针域,用来存放下一个结点的地址

};

TYPE *creat(int n)//n代表创建n个结点链表

{

struct stu *head,*pf,*pb;

int i;

for(i=0;i

{

pb=(TYPE*) malloc(LEN);

printf(“input Number and Age\n”);

scanf("%d%d",&pb->num,&pb->age);

if(i==0)

pf=head=pb;//结点首地址

else pf->next=pb;

pb->next=NULL;

pf=pb;

}

return(head);

}

在函数外首先用宏定义对三个符号常量作了定义。这里用 TYPE 表示 struct stu,用 LEN表示 sizeof(struct stu)主要的目的是为了在以下程序内减少书写并使阅读更加方便。结构stu 定义为外部类型,程序中的各个函数均可使用该定义。

creat 函数用于建立一个有 n 个结点的链表,它是一个指针函数,它返回的指针指向 stu结构。在 creat 函数内定义了三个 stu 结构的指针变量。head 为头指针,pf 为指向两相邻结点的前一结点的指针变量。pb 为后一结点的指针变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    下方为创客专门针对C语言链表分析的视频资料,对链表感兴趣的可以看看学习下
1

C语言玩转链表 http://www.makeru.com.cn/live/1392_338.html?s=45051 指针

http://www.makeru.com.cn/live/1392_238.html?s=45051

指针换装你还认识吗

http://www.makeru.com.cn/live/5413_2043.html?s=45051

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
1 条评论
热度
最新
我们的一个项目,数据库保存前17位数字,这样对应一些SQL语句(比如inner join)有加速作用的 —— 不建议这么搞,ID存全比较好,相比于维护成本,计算成本并不高。
我们的一个项目,数据库保存前17位数字,这样对应一些SQL语句(比如inner join)有加速作用的 —— 不建议这么搞,ID存全比较好,相比于维护成本,计算成本并不高。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
浅谈正则表达式验证身份证号码(C# winform)
目前我国公民身份证号码由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,第18位为校验码。检验码分别是“0、1、2、……10”共11个数字,当检验码为“10”时,为了保证公民身份证号码18位,所以用“X”表示。虽然校验码为“X”不能更换,但若需全用数字表示,只需将18位公民身份号码转换成15位居民身份证号码,去掉第7至8位和最后1位3个数码。
全栈程序员站长
2021/08/12
1.6K0
C#验证二代身份证号码
身份证号码的验证及15位升18位算法 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称”社会保障号码”更名为”公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如下: 一、范围 该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。 二、编码对象 公民身份号码的编码对象是具有中华人民共和国国籍的公民。 三、号码的结构和表示形式 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 2、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。 3、出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 4、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 5、校验码 (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi),先对前17位数字的权求和 Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
全栈程序员站长
2022/09/14
3620
Python计算身份证第18位(校验码)来判断身份证是否输入正确
例如:某女性的身份证号码是220202202002020022。我们要看看这个身份证是不是合法的身份证。 首先我们得出前17位的乘积和是98,然后用98除以11得出其余数是10。最后通过对应规则就可以知道余数10对应的数字是2。所以,可以判定这是一个合格的身份证号码。
zeruns
2020/03/23
5K0
身份证号码的正则表达式及验证详解(JavaScript,Regex)
在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案。本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案。
毛瑞
2018/05/02
24.3K15
身份证号码的正则表达式及验证详解(JavaScript,Regex)
Java实现身份证号码验证
package xxx; /** * Created by wdj on 2017/6/21. */ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; /** * 身份证验证的工具(支持15位或18位省份
Java团长
2018/08/06
3.2K0
PHP根据身份证号码验证、获取星座、生肖和性别函数
居民身份证,是用于证明持有人身份的一种法定证件,多由各国或地区政府发行予公民。并作为每个人重要的身份证明文件。首先介绍一下身份证含义 新的 18 位身份证号码各位的含义: 1-2 位省、自治区、直辖市代码; 3-4 位地级市、盟、自治州代码; 5-6 位县、县级市、区代码; 7-14 位出生年月日,比如 19670401 代表 1967 年 4 月 1 日; 15-17 位为顺序号,其中 17 位男为单数,女为双数; 18 位为校验码,0-9 和 X,由公式随机产生。 举例: 130503
沈唁
2018/05/24
2.6K0
如何通过MD5反查身份证号
身份号码是特征组合码,由前十七位数字本体码和最后一位数字校验码组成。排列顺序从左至右依次为六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
goodspeed
2020/12/22
2K0
如何通过MD5反查身份证号
二代身份证号码验证器[超简单]
第十八位的数字是根据ISO 7064:1983.MOD 11-2校验码算法计算出来的
全栈程序员站长
2022/09/14
1.4K0
涨姿势:用Python完成15位18位身份证的互转
最近工作中刚好要清洗一批客户数据,涉及到身份证号码15位和18位的转换,特意研究了下,在这里分享下。
Python攻城狮
2019/11/07
2.8K0
涨姿势:用Python完成15位18位身份证的互转
用Python写一个身份证号码校验系统
本项目使用Tkinter作为GUI模块,充分利用Python面向对象的思想,开发一款实现身份证号码校验的应用程序。具备解析用户输入的身份证号码中的地区信息、出生日期、以及身份证号码是否合法等功能。是一款练习Python面向对象思想、tkinter GUI模块的优质练手项目。
小雨coding
2020/09/01
3.1K0
用Python写一个身份证号码校验系统
java验证身份证号码是否有效源代码
1、描述 用java语言判断身份证号码是否有效,地区码、出身年月、校验码等验证算法 2、源代码 package test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Hashtable;
代码伴一生
2021/09/19
1.1K0
【Go】根据身份证(或生日)计算年龄
我们计算用户的年龄,当然只能根据用户的出生年月日信息来计算。这里我们定义:用户出生满1年后,年龄算1岁,不满1年算0岁,以此类推,大于1年不到2年算1岁。
后端码匠
2023/11/12
5550
版本号的正则表达式-身份证号码的正则表达式及验证详解(JavaScript,Regex)
  在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案。本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案。
宜轩
2022/12/29
1.8K1
Oracle 关于身份证校验规则详细说明(附有代码复制可执行)
省份(2位)市(2位)区[县](2位)年(2位)月(2位)日(2位)+3位序列号 [奇数给男性/偶数给女性]
星哥玩云
2022/08/16
2.1K0
正则表达式 - 18位身份证号
        18位身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:
用户1148526
2023/04/28
1.4K0
身份证号码大 全_622628是哪里的身份证号码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170899.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
1.1K0
56行Python代码实现身份证字典生成器
最近过生日,女朋友送了几本Python黑客编程的书(没错,小黑阔也是可以有女朋友的)。哈哈,皮一下就是很开心。
用户1631416
2018/12/13
10.2K0
身份证号码第十八位计算方式
用户只需输入17位身份证号码,点击“计算”按钮,系统将自动计算并显示完整的身份证号码及其相关信息,包括地区、出生日期和性别。
C4rpeDime
2024/12/24
2300
校验身份证号码
之前在做项目的时候遇到了需要校验身份证号码,最初始的想法就是校验一下是否数字还有就是校验长度,后来想到有的身份证号的最末尾数字是X,于是又加入了一层判断末尾数为X的判断。
OECOM
2020/07/02
2.7K0
身份证校验(c++实现)
我国国标〖GB 11643-1999〗中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其校验码(最后一位)计算方法和步骤为:
用户2038589
2018/09/06
1.8K0
推荐阅读
相关推荐
浅谈正则表达式验证身份证号码(C# winform)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验