栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
设计的栈结构中包括数据数组以及top坐标,这里top指向的栈顶元素的位置,初始top为-1,代表栈为空
入栈首先需要判断栈是否满了,这里设置栈大小为20,由0下标开始,即top指向19时就代表栈满了 然后进行top自增并添加数据
出栈的操作并没有修改栈中的数据的内容,只是移动了top的值 出栈需要先判断栈是否为空 出栈的同时将栈顶元素赋值给data
再分配栈大小时,太小会导致数据存储不下,而太大可能又会造成大量的空间被浪费,因此采用共享栈的思想,主要思想就是一个top,默认值为-1,一个down,默认存储栈的最大存储数据量-1。如下图所示
入栈 down向下移动,top向上移动 出栈 down向上移动,top向下移动 判断共享栈是否满了 down-1等于top时就说明栈满了
typedef struct{ int data[MAXSIZE]; int top; int down; } ShareStack;
需要同时对top和down进行初始化