堆栈(Stack)是有约束的线性表,插入和删除都只能在表的同一端。
对于用数组来实现的话,我们一般把数组起始位置作为栈底,把下标越来越大的部分作为栈顶。这样就需要一个标记来表示当前栈顶的位置。
顺序栈:
typedef int elementType;
typedef int position;
struct StackNode{
elementType * Data;//表示堆栈的数组
position top; //标记栈顶的位置
int MAXSIZE; //最大空间
};
typedef struct StackNode * Stack;
初始化一个空的顺序栈就可以这样:
Stack makeEmptyStack(int MAXSIZE){
Stack s = (Stack)malloc(sizeof(struct StackNode)); //申请堆栈内存
s->MAXSIZE = MAXSIZE; //根据传入的参数决定数组大小
s->Data = (elementType*)malloc(MAXSIZE*sizeof(elementType));//申请数组内存
s->top = -1; //-1表示当前栈的元素为空
return s;
}
入栈:
//入栈push
bool pushStack(Stack s, elementType x){
if (s->MAXSIZE-1 == s->top){ //当栈顶标记到达最大的位置时 栈已满
printf("堆栈已满\n");
return