rime的数据结构笔记(c语言)–第二章线性表(1)【struct语法】

  • Post author:
  • Post category:其他




线性表的定义和特征


定义

:由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



版权声明:本文为rime_neko原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。