栈-顺序存储 代码实现 代码实现 #include<stdio.h> #include<stdlib.h> #include<stdbool.h>//栈的长度的固定为100 #define MaxSize 100 //元素数据类型 #define ElemType inttypedef struct{//整个栈的数据ElemType data[MaxSize];//栈顶指针(说是指针,其实就是个标识位置信息的变量)int top; }SeqStack;//初始化栈 void InitStack(SeqStack *stack){//所谓的初始化不过就是把这个指针设置为-1的位置上,表示当前栈里啥也没有。因为要是有一个元素,指针就指向0了。stack->top = -1; };//判断栈是否为空 bool StackEmpty(SeqStack stack){if(stack.top == -1)return true;return false; }//进栈操作 bool Push(SeqStack *stack,ElemType e){//进栈之前先判断栈满没满if(stack->top == MaxSize){return false;}//先让栈顶向上移动一个位置stack->top++;//把元素赋值到栈顶stack->data[stack->top] = e; }//出栈操作(若栈未空,则弹出栈顶元素,并用e返回) bool Pop(SeqStack *stack,ElemType *e){//先判断栈是否为空if(StackEmpty(*stack)){return false;}//将栈顶元素赋值给e*e = stack->data[stack->top];//将top向下移动一个位置stack->top--;return true; }//获取栈顶元素,与Pop操作不同的是,这个只是读取栈顶元素,而不会将栈顶元素弹出。将读出的元素赋值给e bool GetTop(SeqStack stack,ElemType *e){//判断栈是否为空if(StackEmpty(stack)){return false;}//将栈顶元素赋值给e*e = stack.data[stack.top];return true; }//销毁栈 void DestroyStack(SeqStack *stack){//只需要将栈顶元素置为-1即可stack->top = -1; }int main(){ElemType Elem;SeqStack stack;//初始化栈InitStack(&stack);//进栈一个元素Push(&stack,1);//读一下刚才进栈的元素GetTop(stack,&Elem);printf("当前栈顶元素为:%d\n",Elem);//出栈这个元素Pop(&stack,&Elem);//打印一下刚才出栈的元素printf("刚才出栈的元素为:%d\n",Elem);//销毁栈DestroyStack(&stack);return 0; }