用C实现两个栈实现一个队列的问题!!一直报告段错误,求高手!

#include <stdio.h>

#define MAXSIZE 100

typedef struct {
int top;
int s[MAXSIZE];
} Stack;

void Init_stack(Stack S)
{
S.top = -1;
}
int is_empty(Stack S)
{
if(S.top == -1)
return 1;
else
return 0;
}

int is_full(Stack S)
{
if(S.top == MAXSIZE - 1)
return 1;
else
return 0;
}

void PUSH(Stack S, int n)
{
if(!is_full(S))
{
S.top++;
S.elem[S.top] = n;
}
else printf("the stack is full!");
}

int POP(Stack S)
{
if(is_empty(S))
return -1;
else
return S.s[S.top];
S.top--;
}
void Transfer(Stack S1, Stack S2)
{
int p;
if(!is_empty(S1))
{
p=POP(S1);
PUSH(S2,p);
}
}

int main(void)
{
int p;
Stack s1,s2;
Init_stack(s1);
Init_stack(s2);

PUSH(s1,1);
PUSH(s1,2);
PUSH(s1,3);

Transfer(s1,s2);
p=POP(s2);
printf("%d ",p);

return 0;
}
用GDB调试的时候说PUSH()函数出现错误。

发现了三个问题:

第一,在结构的定义中你使用的是int s[MAXSIZE];,在PUSH函数中你使用的是S.elem[]
会出现找不到符号错误

第二,Init_stack函数中参数为Stack s,但是Stack是结构,在函数中你改变形参s,并不会改变实参。也就是说,main函数中s1,s2的初始化并没有实际完成。
就这一点你可以考虑使在Init_stack函数中用指针或者引用传参

第三,在你的POP函数中:S.top--; 这句话放在了return的后面,这将导致S.top--; 永远不会被执行,要修改。
另外,当栈空时,POP函数返回-1, 如果我的栈顶存在一个值为-1的元素,是否会发生混淆?这个也应该改进一下。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜