数据结构用c写的栈的操作,编译正确但是运行有错误 是怎么回事

2025-03-25 05:18:15
推荐回答(1个)
回答(1):

参数传递有问题,c语言的参数是单向值传递,只能从实参传向形参,不能反向传递,所以你只要把所有的形参改成指针即可,调用时也必须用指针:
Status InitStack(SqStack *S){ //构造一个空栈S。。。。}
Status Push(SqStack *S,SelemType e){ //插入e为新的栈顶元素。。。。}
Status Pop(SqStack *S,SelemType *e){ //若栈不空,删除栈顶元素并用e返回其值,并返回OK;否则返回ERROR。。。。//元素e也是一样必须用地址传递。。。。}
Status StackEmpty(SqStack S){ //判断栈S是否为空,若为空返回TRUE,否则返回FALSE,可以不需地址传递。。。}

void conversion(){ //进制转换
//对于输入的任意一个非负十进制整数,打印输出与其等值的对应的进制数
SqStack S;
int N,d,ys;
SelemType x,e;
InitStack(&S); //构造一个空栈S,修改为地址传递
while(1){
printf("请输入一个非负十进制整数(0结束):");
scanf("%d",&N);
if(N==0) break;