嵌入式技术
在这么卷的时代,我觉得硬件工程师还是 要掌握基本的C语言编写能力,链表在学生阶段是一个比较难的知识点,可能有些同学上完一个大学都不会链表的编写,但是在未来工作中, 链表应用不管在嵌入式行业还是互联网行业都应用的非常基础,所以这个知识点是有必要全面掌握的。 下面将手把手教你,用开发软件写一个简单的静态链表程序。
关键词:静态链表;
01什么是链表
链表是一种常见的重要的数据结构,它是动态地进行存储分配的一种结构,链表和数组比较,不用事先确定存储空间,而是根据需要开辟内存单元。 图1-1是最简单的一种链表(单向链表)的结构:
图1-1 单向链表结构图
图1-1中,第0个结点称为 头结点 ,它存放有第一个结点的首地址,它没有数据,只是一个 指针变量 。
以下的每个结点都分为两个域,一个是 数据域 ,存放各种实际的数据,如学号 num,姓名 name,性别 sex 和成绩score 等。
另一个域为 指针域 ,存放下一结点的首地址。 链表中的每一个结点都是同一种结构类型。
用的Visual Studio 2019软件。
首先,打开软件,点击【创建新项目】,如图1-3所示:
图1-3 创建新项目
然后在新项目中点击【空项目】,如图1-4所示:
图1-4 点击空项目
接着,配置【项目名称】和【项目储存位置】,如图1-5所示:
图1-5 配置项目
最后,在【源文件】中添加【C文件】,如图1-6所示:
图1-6 添加C文件
02建立链表
建立链表所需要的头文件,代母如下:
#include
#include
需要使用宏定义定义相关变量,代码如下:
#define LEN sizeof(struct Student)//宏定义节点长度得命名
#define TYPE struct Student //宏定义结构体变量命名
需创建一个结构体,代码如下:
struct Student //定义一个学生类型结构体,包括学号,分数
{
长数;
浮动分数;
struct Student* next; //next是指针变量,指向结构体变量
};//指向结构体对象得指针变量既可以指向结构体变量,也可以指向结构体数组中得元素
需编写主函数,代码如下:
int main()
{
TYPE* head,*p; //定义头指针
struct Student a,b,c; //定义三个结构体变量
a.num = 101; a.score = 20; //分别对三个结点赋值
b.num = 102;b.分数 = 20;
c.num = 103;c.分数 = 20;
/*1、A.B则A为对象或者结构体
2、A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针; */
头 = &a;
a.next = &b;
b.下一个 = &c;
c.next = 空;
p = head; //把首地址给变量
的
{
printf("%ld %5.1f\\n",p->num,p->score);//输出每个结点信息
p = p->next; //使P指向下一个结点
} while (p != NULL); //直到指针域指向空值
返回 0;
}
运行程序,最终结果显示如图1-7所示:
图1-7 运行结果界面
图1-7最终将链表各个成员的数据逐个输出,表明建立的链表是正确的。
将第一个结点的起始地址赋值给头指针head,将第二个结点的起始地址赋值给第一个结点的next成员,将第二个结点的起始地址赋给第一个结点的next… 第三个结点的next赋值为NULL,这就形成了简单的链表。
但是这种是手动逐个建立的链表,简称【静态链表】,这种对于成员数目一定的情况比较适用,但是对于成员数目很多的情况,就不能使用这种方法了,比较繁琐,所以需要使用动态的方式添加链表,下期讲解动态链表!
全部0条评论
快来发表一下你的评论吧 !