目录
2.利用顺序表的初始化函数SLInit把顺序表s设置为空顺序表的原理
2.1.写法1-顺序表初始化函数SLInit利用二级指针pps改变一级指针ps的值使得一级指针ps指向的是1个顺序表SL.
2.2.写法2-顺序表初始化函数SLInit返回顺序表的地址
一、1个数据结构的初始化取决于这个数据结构最初的状态是什么
1.顺序表的最初的状态是空顺序表——这个最初状态导致顺序表应初始化为空顺序表。
二、数据结构——顺序表的初始化
(注意:①顺序表本质是个结构体,而且这个结构体是不存放顺序表的数据data的,但是这个结构体却存放顺序表数据data所在堆区中的地址a;②这里的顺序表s表示结构体变量s)
1.顺序表的创建和初始化的思路
由于顺序表的本质是个结构体,而且顺序表最初的状态是个空顺序表同时也可以认为顺序表最初的状态是个结构体,所以一开始可以直接定义1个结构体变量s表示1个顺序表而且不用对结构体变量s进行初始化(注意:变量s的类型为结构体SL;这里把变量s简称为顺序表s),然后利用顺序表的初始化函数SLInit把顺序表s设置为空顺序表。
2.利用顺序表的初始化函数SLInit把顺序表s设置为空顺序表的原理
不管顺序表s中的成员变量指针SLDatyp*a和成员变量int capacity的值是多少,只要一开始顺序表s中的成员变量int size的值是0即size = 0就可以说明结构体变量s是个空顺序表,所以要想利用顺序表初始化函数SLInit把顺序表s设置为空顺序表的话,则必须在SLInit函数的内部把顺序表s中的成员变量int size的值设置0来表示顺序表s是个空链表。
总的来说,由于顺序表s是个空顺序表,所以一般SLInit函数把顺序表s的成员变量指针a设置为NULL,把成员变量capacity设置为0。
小结:总的来说,不管结构体类型SL中的成员变量指针a和成员变量capacity的值是多少,只要保证结构体类型SL中的成员变量size的值为0就可以说明这个结构体变量s是个空顺序表。
注意:
(1)这个顺序表s是不存放顺序表s的数据data的,因为这个顺序表s是存放在栈区的,而顺序表s的数据data是存放在堆区的,而且顺序表s只是存放了顺序表s的数据data所在堆区中的地址a。
(2)不管顺序表sl中的成员变量有没有被顺序表的初始化函数SLInit进行初始化即不管有没有让结构体变量s中的成员变量指针a指向顺序表数据data所在的动态空间,只要结构体变量s被定义了就说明了结构体变量s是个顺序表。
(3)对顺序表s进行初始化为空顺序表的两种方式:
方式1:size = 0,capacity = 0,a = NULL。
图形解析:
方式2:size = 0,capacity != 0,a != NULL。
图形解析:
三、1个顺序表的两种创建方式
1.方式一
在主调函数中直接定义一个结构体变量s,而这个结构体变量s就是表示1个顺序表。由于这里已经直接定义一个结构体变量s表示1个顺序表,所以在顺序表初始化函数SLInit的内部不需要再用malloc为顺序表s申请空间(即不需要用malloc创建一个结构体s的空间)了,只需用顺序表初始化函数SLInit对顺序表s的成员变量进行初始化。
2.方式二
在主调函数中定义一个指向结构体SL的指针ps,并在顺序表的初始化函数SLInit的内部为结构体指针ps分配顺序表SL的空间同时在顺序表的初始化函数SLInit的内部还要对顺序表SL的成员变量进行初始化。