(次日)
"那么,按照说好的,这是你应得的"(递),"阿里嘎多!",那么这就是我赚的第一桶金了——接委托真不错。
(回到旅店)
"考核应该没什么问题,先准备下下一个旅行的地方吧,嗯,是栈和队列联邦:
定义
和线性表一致,栈也拥有顺序、链式两种存储的表示方法,分别称为顺序栈、链栈。
顺序栈
利用一组连续的存储单元依次存放从栈底到栈顶的数据元素,同时用一个栈顶指针top用以表示当前的栈顶的位置。
栈底的位置可以设置在任何一端,而栈顶的位置是随着出、入栈而动态变化的。通常将数组下标为0的一端表示栈底,栈顶指针top=0的时候称之为空栈,下来是术式说明:
#define Stack_Init_Size 10 //定义初始大小
#define Stack_Increment 10 //存储空间分配增量
typedef int Elemtype; //定义元素类型
typedef struct stacklist
{
Elemtype * stackdata; //栈中数据元素存储空间(一维数组)的起始地址
int top; //栈顶指针,实际上是栈顶位置的下标
int stacksize; //栈当前的可用大小,初始化交给Stack_Init_Size来定义
}SeqStack;
所以,并没有开始就固定栈存储空间的大小,而是使用指针stackdata来动态的分配,在初始化栈的时候,为其分配Stack_Init_Size的大小的栈存储空间。在使用完后可以继续增加Stack_Increment的存储空间,栈的可用空间可以用stacksize定义。
在开始的时候,栈顶为0,每当有元素入栈的时候就会自增,反之则自减,变化如图所示:
关于具体术式方面:
初始化顺序栈
int InitStack(SeqStack *S){
if(!S)return 0;//顺序栈无效
//分配内存空间
S->stackdata=(Elemtype*)malloc(Stack_Init_Size * sizeof(Elemtype));
if(!S->stackdata)return 0;//内存分配错误
S->top=0;//初始化栈顶指针
S->stacksize=Stack_Init_Size;//设置当前栈的大小
return 1;
}
以上为初始化分配由Stack_Init_Size指定大小的存储空间,并设置好栈顶指针
//1.14