栈的应用的一个迷糊
刚才写了个关于栈的应用的代码:利用栈对用户输入的整数进行奇偶分类,可是出现了一个问题,运行后什么没看到就崩溃了,提示的警告是:D:\VC6.0\MSDev98\MyProjects\利用栈分类_1\利用栈分类_1.cpp(62) : warning C4700: local variable 's' used without having been initialized 到百度查理翻译说是主函数中的InitStack(s)函数的参数没有初始化,这要初始化为什么啊?请大侠指教。
程序代码:#include<stdio.h>
#define MaxSize 100
typedef struct
{//定义栈,栈1和栈2共享空间
int elements[MaxSize];
int top1; //栈1栈顶指针,初始值为“0”
int top2; //栈2栈顶指针,初始值为“MaxSize”
}BiStack;
void InitStack(BiStack *s)
{//建立空栈
s->top1 = 0;
s->top2 = MaxSize;
}
bool IsFull(BiStack s)
{//判断栈s是否为满,若为满则返回true ,否则返回false
if(s.top1 == s.top2)return true;
else return false;
}
bool IsEmpty(BiStack s)
{//判断栈s是否为空,若为空则返回true ,否则返回false
if(s.top1 == 0 && s.top2 == MaxSize)return true;
else return false ;
}
void Push(BiStack *s,int e)
{//进栈操作,元素e作为栈顶元素插入到栈中
if(!IsFull(*s))
{//判满
if(e%2 == 0)
{//如果输入的是偶数则进栈1,由共享空间的头部递增进栈
s->elements[s->top1] = e;
s->top1++;
}
else
{//如果输入的是奇数则进栈2,从共享空间的尾部递减进栈
s->top2--;
s->elements[s->top2] = e;
}
}
else printf("栈满!\n");
}
void Pop(BiStack *s,int tag)
{//出栈,用tag标记告诉s要输出的是栈1还是栈2,若tag=1,则输出的是栈1(即偶数);若tag=2 则输出栈2(即奇数)
if(!IsEmpty(*s))
{//判空
if(tag == 1)
{//tag=1,栈1出栈
s->top1--;
printf("%d\t",s->elements[s->top1]);
}
else
{//tag=2,栈2出栈
printf("%d\t",s->elements[s->top2]);
s->top2++;
}
}
else printf("栈空!\n");
}
int main()
{
BiStack *s; //定义一个BiStack 类的指针s
int e,i;
InitStack(s);//创建空栈
printf("请输入10个整数:\t");
for(i = 0;i < 10;i++)
{//输入10个整数并把值放到栈里
scanf("%d",&e);
Push(s,e);
}
printf("分类后为:");
for(i = 1;i <= 2;i++)
{//利用for循环控制输出的是偶数还是奇数,这里的i传递给Pop(BiStack *s,int tag)函数中的tag标识
if(i == 1)printf("偶数类:\t");
else printf("奇数类:\t");
while(s->top1 != 0 && s->top2 != MaxSize)
{
Pop(s,i);
}
}
return 0;
}



没人!

须学习
