栈的应用的一个迷糊
刚才写了个关于栈的应用的代码:利用栈对用户输入的整数进行奇偶分类,可是出现了一个问题,运行后什么没看到就崩溃了,提示的警告是: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; }