结构体与链表学习

这几天都在为了学习数据结构准备,刷了一些题 但都比较简单,就没有发每日一题了~

结构体的定义和结构变量的定义

这个比较简单就看书就好,这里介绍我看到的比较新颖的结构变量定义.

利用宏定义使用一个符号变量来表示一个结构类型和定义结构变量

#define STU struct student

STU

{

       int num;

        char name[20];

};

STU stu1,stu2;

同一个结构体的变量与变量之间可以进行赋值的操作,注意要对一个结构体变量进行输入输出等操作的时候需要使用"."这个运算符,也就是点,比如 stu1.num就是第一个"人"的学号,stu2.name就是第二个"人"的名字,其实就看作一个普通的int变量/char数组就可以了

结构数组的定义和引用

结构数组其实就是一个数组,其中每个元素都是一个结构体的变量而已,

指向结构变量的指针

也就是结构指针变量,实质上就是指向一个结构体中的变量的指针,只是这个变量是一个结构体类型的变量,也就是stu1和stu2这样的,这个指针中的地址是这个结构变量的首地址,问题是结构变量的首地址是什么,在哪儿?或者换个问题,一个结构体变量中的各个变量数组的地址是否是连续的?即stu1和stu2中定义的num和name[20]是否连续储存,是否有规则的分配空间?

结构指针变量的定义:struct student *p

注意:结构体指针只能进行如下指向(赋值)p=&stu1,而不能有p=&student和p=&stu1.num的赋值方式.

有了结构指针变量,可以方便的访问结构变量中的每个元素,如(*p).num或者p->num与stu1.num等价

注意:"."优先级高于"*"所以括号不可少,且我们更在面对这种指针时习惯用p->num.

结构变量与函数参数

我们可以用结构变量的成员作为作为参数,如void print(struct student s),但这时跟普通变量的函数一样,属于值传递,我们可以用两种方式来避免值传递的缺陷

方法一

在函数中定义一个相同结构体的变量,最后返回这个结构体变量就可以

方法二

也就是使用指针,void print(struct student *p)

复杂结构体

结构体中定义结构体的知识就不再赘述,这里为了后续链表的学习主要缕一缕结构体的自我引用

struct student

{

       int num;

        char name[20];

        struct student *link;

};

你可能感兴趣的:(链表,学习,数据结构)