Jack 家的胡同很窄,只能通过一辆车,而且是死胡同,只能从胡同口进出,如果第一个进入,出去会很麻烦,需要所有的车辆出去后才能出去,如图:
胡同里的小汽车是排成一条直线,是线性排列,而且只能从一端进出,后进的汽车先出去,后进 先出(Last In First Out,LIFO),这就是"栈"。栈也是一种线性表,只不过它是操作受限的线性 表,只能在一端操作。 进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储。 我们先看顺序存储方式:
其中,base 指向栈底,top 指向栈顶。
注意:栈只能在一端操作,后进先出,这是栈的关键特征,也就是说不允许在中间查找、取值、插入、删除等 操作,我们掌握好顺序栈的初始化、入栈,出栈,取栈顶元素等操作即可。
1 #define MaxSize 128 //预先分配空间,这个数值根据实际需要预估确定 2 3 typedef int ElemType; 4 5 typedef struct _SqStack 6 { 7 ElemType *base; //栈底指针 8 ElemType *top; //栈顶指针 9 }SqStack;
1 bool InitStack(SqStack &S) //构造一个空栈 S 2 { 3 S.base = new int[MaxSize]; //为顺序栈分配一个最大容量为 Maxsize 的空间 4 5 if (!S.base) //空间分配失败 6 return false; 7 8 S.top=S.base; //top 初始为 base,空栈 9 10 return true; 11 }