线性表的定义和特征
定义
:由n个类型相同的元素a1,a2,a3,,,,,an组成的有限序列
特点:
(1)存在唯一的第一个元素
(2)存在唯一的末尾元素
(3)除第一个之外,结构中的每一个元素都只有一个前驱
(4)除最后一个之外,结构体中的每一个元素都只有一个后继
同一性:有相同特点
有穷性:有限制有明确数量
有序性:有顺序
关于struct
结构体是数据结构中很重要的一环,所以在这里进行strcuk笔记记录
基本结构:
struct 结构体名
{
类型名1 成员名1;
类型名2 成员名2;
……
类型名n 成员名n;
};
引用示例:
struct Student
{
char*name;//姓名
int age;//年龄
float height;//身高
};
struct Student stu;//将他看成一个自定义的类,赋值给相对应的stu
第二种:
struct Student
{
char *name;//姓名
int age;//年龄
float height;//身高
}stu;//直接将stu变成结构体
第三种:
struct {
char *name;//姓名
int age;//年龄
float height;//身高
}stu;只能使用一次,省略掉了结构体的名字
与typedef组合
typedef struct //重命名
{
int a;
int book;
char school;
}boa;
boa a;//将结构名字变成了boa 方便书写。
struck需要注意的地方
禁止递归
struct Student {
int age;
struct Student stu;
};
可以包含其他结构体
struct Date
{
int year;
int month;
int day;
};
struct Student
{
char *name;
struct Date birthday; //引用第一个结构体
};
关于内存
定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量
结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列
struct Student
{
char *name; // 姓名
int age; // 年龄
float height; // 身高
};
在16位编译器环境下,一个Student变量共占用内存:2 + 2 + 4 = 8字节。
关于初始化
struct Student
{
char *name;
int age;
};
struct Student stu = {"MJ", 27};
用{ “ ”,}的方式将结构体的初始值给予
只能在定义变量的同时进行初始化赋值,初始化赋值和变量的定义不能分开,下面的做法是错误的:
struct Student stu;
stu = {"MJ", 27};
关于引用
struct Student {
char *name;
int age;
};
struct Student stu;
stu.age = 27; // 访问stu的age成员........(2)
如果是结构体中有结构体,可以用多次的 . 来实现引用
struct Date {
int year;
int month;
int day;
};
struct Student {
char *name;
struct Date birthday;
};
struct Student stu;
stu.birthday.year = 1986;
stu.birthday.month = 9;
stu.birthday.day = 10;
相同类型的结构体可以直接赋值
struct Student {
char *name;
int age;
};
struct Student stu1 = {"MJ", 27};
struct Student stu2 = stu1; // 将stu1直接赋值给stu2
printf("age is %d", stu2.age);
结果自然是age is 27
关于结构体数组
和结构体一样的定义方法,都是一样的三种方式
struct Student {
char *name;
int age;
};
struct Student stu[5]; //定义1
只是在stu上加上了数组的标志【】
初始化
struct {
char *name;
int age;
} stu[2] = { {"MJ", 27}, {"JJ", 30} };
同时,它也像数组一样,可以靠下标访问到
指向结构体的指针变量
1、每个结构体变量都有自己的存储空间和地址,因此指针也可以指向结构体变量
2、结构体指针变量的定义形式:struct 结构体名称 *指针变量名
3、 有了指向结构体的指针,那么就有3种访问结构体成员的方式
(1)、结构体变量名.成员名
(2)、(*指针变量名).成员名
(3)、指针变量名->成员名
参考信息:
鲸鱼的简书
作者:鲸鱼Alice1992