用C语言实现顺序栈时遇到的有关问题
用C语言实现顺序栈时遇到的问题
编译可以过,执行不能过,代码如下:
------解决方案--------------------
编译可以过,执行不能过,代码如下:
- C/C++ code
#include <stdio.h> #include <stdlib.h> typedef struct { char *base; char *top; int stacksize; } SqStack; void InitStack(SqStack S) { char a[MAXSIZE]; S.base = a; if(!S.base) exit(0); S.top = S.base; S.stacksize = MAXSIZE; } // 入栈 int Push(SqStack S, char e) { if(S.top - S.base == S.stacksize) return 0; // 栈满 *S.top++ = e; // 每次到这就出错,为什么?????? return 1; } void main(void) { char e = 'a'; SqStack S; InitStack(S); // 初始化栈 Push(S, e); // 入栈 }
------解决方案--------------------
- C/C++ code
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 typedef struct { char *base; char *top; int stacksize; } SqStack; void InitStack(SqStack *S) { S->base = (char *)malloc(sizeof(char) * MAXSIZE); if(!S->base) exit(0); S->top = S->base; S->stacksize = MAXSIZE; } // 入栈 int Push(SqStack *S, char e) { if(S->top - S->base == S->stacksize) return 0; // 栈满 *(S->top++) = e; return 1; } int main() { char e = 'a'; SqStack S; InitStack(&S); // 初始化栈 Push(&S, e); free(S.base); return 0; }