令人头痛的堆栈问题
求解,,,,编译通过,int StackPop(SeqStack *S,int *d)的返回值为整形,要么1,要么0,问题是,我想要得到里面的指针变量值,*d,如何才能得到、课本上就直接StackPop(Stack1,&x);printf("%d ",x);我本来也认为没错,但是运行时发现些猫腻,求教于各位大虾// 静态顺序堆栈操作.cpp : Defines the entry point for the console application.
//
#include<stdio.h>
#include<math.h>
#define MaxStackSize 100
//#include"SeqStack.h"
typedef struct
{
int stack[MaxStackSize];
int top;
}SeqStack;
SeqStack *StackInitiate(SeqStack *S)
{
S->top =0;
return (S);
};
int StackPush(SeqStack *S,int x)//入栈
{
if(S->top >=MaxStackSize)
{
printf("堆栈已满无法插入!\n");
return 0;
}
else
{
S->stack[S->top] = x;
S->top++;
return 1;
}
};
int StackPop(SeqStack *S,int *d)
{
if(S->top =0)
{
printf("堆栈已空无数据元素出栈\n");
return 0;
}
else
{
S->top--;
*d = S->stack[S->top];
return 1;
}
};
int StackTop(SeqStack S,int *d)
{
if(S.top <=0)
{
printf("堆栈已空!\n");
return 0;
}
else
{
*d = S.stack[S.top - 1];
return 1;
}
};
int StackNotEmpty(SeqStack S)
{
if(S.top<= 0)
return 0;
else
return 1;
};
int main()
{
SeqStack myStack,*Stack1;
int i,x;//,w
char ch;
printf("本程序通过实验使学生掌握静态顺序堆栈\n概念和基本操作,为了试验顺利完成,建议按字母的\n的先后顺序选择选项\n");
scanf(" %c",&ch);
while(ch == 'a'||'b'||'c')
{
switch (ch)
{
case 'a':
printf("正在进行栈的初始化\n");
Stack1 = StackInitiate(&myStack);
break;
case 'b':
printf("正在入栈....\n");
for(i=0;i<5;i++)
StackPush(Stack1,i+1);//入栈
StackTop(*Stack1, &x);//返回栈顶元素
printf("当前的栈顶数据元素为: %d\n",x);
break;
case 'c':
printf("您选择的是堆栈的弹栈操作,输出操作\n");
//StackPop(Stack1,&w);//a problem been fund
/*printf("%d 出栈\n",w);
StackTop(*Stack1,&x);
printf("当前的栈顶数据元素为: %d\n",x);*/
printf("输出元素");
while(StackNotEmpty(*Stack1))
{
StackPop(Stack1,&x);//此处出现问题
printf("%d ",x);
}
break;
default:
printf("发生了一件意外的事情,请输入a b c 其中的一个\n");
break;
}
scanf(" %c",&ch);
}
return 0;
}