PS:在这篇博客里我会把我的读者当纯小白讲,受限于个人实力,文章中难免出现疏漏,希望大佬们给予斧正。
开篇前言:
自律者自由。
最近一直在看数据结构的相关习题,在初期学习数据结构的时候,最重要的就是C语言中的结构体了。
因为结构体,我们才有了链式存储结构,在某些算法的设计上,极大的简化了算法的时间复杂度。总之,这是一个灰常重要的知识啦,如果这一块学不好,就很难再攻克更艰深的算法知识了。
所以说对于CS等专业的人来说,这一块一定要学好哦,放心听,我给一个文法的妹子都讲明白了,对诸位未来的大佬,来讲肯定是 一点问题都没有啊!一定要坚持看完哦,如果说有不会的地方,就先跳过去,我应该都会解释的。
首先我们看一下什么样子的东西叫做结构体
struct tag{
Elem data1;
}name;
我们平常见到的结构体类型大概就是这个样子的,那么他代表什么意思呢?
首先 tag 字段代表你可以将他替换成任意的字符,它代表你已经凭空创造了一种数据类型叫做tag,Elem则是像int 等的这种类型字段,后面的data1就是我们常见的变量名啦,然后最后的name,则代表我已经使用这个叫做tag的结构体声明了一个变量,这个变量名字叫做name。
我举几个栗子来进行说明吧。
struct {
int a;
double b;
char c;
}s1;
这个结构体就代表我们声明了一个结构体变量叫做s1,我们可以通过 s1.a的方式来获取到对这个成员变量的操作权限。而我们只是声明了一个结构体叫做s1,我们同时还得到了,int s1.a,double s1.b和 char s1.c,但是我们现在只得到了一个这样的结构体变量,变量的名字叫做s1,那么我们要如何定义这种结构体呢?
struct node{
int a;
double b;
};
瞧!我们做了什么,我们声明了一个变量叫做node
这样我们就只需要在程序中加入这么一句话就可以了
struct node s2;
哈!我们又得到了一个这样的结构体变量s2,他的结构组成就如结构体中的定义所示,我们可以通过这种方式进行变量的创建。
所以结构究竟是什么呢?
结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
下面我将简单解析结构体的最重要的应用------链表。
链表节点(如下图所示):
typedef struct LNode{
int data;
LNode *next;
}LNode,*LinkList;
一个链表的节点,就包含了一个int类型的变量和一个 LNode*的地址型变量,这样我们就可以通过data存储数据,使用next存储下一个节点的地址,这样不断地链入就形成了链表。
另外这里需要说明的是 LNode*和LinkList这两个语句是等价的
这就是一个链表节点的组成,对于这个链表的具体应用,我们在这就不详细展开讲解了,以后我还会在写一些补充说明。
下面我将就这个链表节点来讲一下各部分起到的作用
1.typedef typedef 本身就是一个类似于宏的关键词,它的作用就是重命名,在这里的体现就是本来我们在声明结构体时应该是:
struct Name s1;
但是加上这个关键词之后我们只需要这样就可以进行声明了:
Name s2;
这样可以使代码更简洁
2.{}中的内容 在这其中的就是成员变量,一个结构体就是一个大家庭,这里面的成员变量就是家庭成员,他们各有各的作用
3.LNode, *LinkList 则代表对于这个结构体我们已经声明了两种调用类型 一种就是LNode类型,一种是LNode*类型。
以上就是对这个链表节点的一小点讲解。
接下来我们将会在下一篇文章中看一个具体的应用-----使用结构体来实现链表的创建,以及增删元素。