数据结构与算法是软件工程系必修的一门课程,正学习这门课程的你,是否有被这门课程某一章,某一节或者某个知识点折磨?
(文章干货较多,重在理解!建议大家点个赞,再收藏,以避免需要的时候找不到)
顺序栈的结构类型定义常见并要求我们掌握的有三种:
栈是一种特殊的线性表,其特殊性在于限定仅在表尾进行插入和删除操作
线性表的顺序存储结构是指用一段地址连续的存储单元一次存储线性表的数据元素(类似数组定义)。
因此,在c语言中我们可以用一维数组来实现顺序存储结构,数组的空间分配又可以分为静态和动态两种方式,由此扩展理解栈的多种结构类型定义。
①第一种:
这种结构类型的定义,可以理解为数组,top是这个数组中的索引值,当对栈进行操作时,top不断地做相应地变化。在定义这个类型时,系统是不分配空间的。
在主函数中声明的时,如果定义了关于这个结构体的变量,则系统会对这个结构体分配一个相应大小的空间,在初始化栈的时候,则不再需要动态分配,如果没有定义变量,则在初始化时依然需要对这个结构体动态空间申请!
(注:定义结构体变量名是不是指针类型)
②第二种:
相比于前面的结构类型地定义,这样的方法定义时系统依然不分配空间,因为我们知识单纯的定义了这个结构体类型,并没有定义结构体变量。
可以这样理解:假设系统给这个结构体类型分配了空间,但我们没有定义一个变量去接受这个空间,那系统是不是会出现错误呢?
但在这个类型的定义中,如果在主函数中定义了一个结构体变量(普通变量),则系统会对这个结构体分配一个空间
在初始化栈时我们依然需要进行一次动态空间申请,这次申请分配空间的目标不是这个结构体,而是对SElemType *data进行空间申请
因为SElemType *data是指针变量(基地址),如果在主函数时没有定义结构体变量,则我们在初始化栈要进行两次动态空间申请,两次申请的空间目标对象不一样。
③第三种:
在这个定义类型中,定义了两个指针类型指向存储空间的地址(在分配空间后),初始化时两个指针指向同一位置,base指向的是基地址,当对栈进行操作时,top的指向将不断地进行相应的变化。
初始化时分配需要进行动态申请空间的次数与第二种类似:对结构体分配空间和对及地址分配空间。
定义int stacksize的目的是记录分配空间的大小,方便判断栈是否已满,与第一中定义方式不同的是,第一种类型的定义,一旦系统分配了空间,栈的大小就确定为MAXSIZE。
此刻的你
是否依然十分懵逼
这说的是啥跟啥
??!!
有空会再更对在这三种定义结构下的详细操作和解析。
如果觉得对你有用,那就点个赞呗!