| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 822 人关注过本帖
标题:栈的应用的一个迷糊
取消只看楼主 加入收藏
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
结帖率:71.43%
收藏
已结贴  问题点数:10 回复次数:6 
栈的应用的一个迷糊
刚才写了个关于栈的应用的代码:利用栈对用户输入的整数进行奇偶分类,可是出现了一个问题,运行后什么没看到就崩溃了,提示的警告是: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;
}
搜索更多相关主题的帖子: 应用 
2012-10-22 23:35
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
没人!
2012-10-23 15:01
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
回复 3楼 newdos
我把它赋为NULL了,但还是不行
2012-10-23 22:25
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
额,万分感谢
2012-10-26 00:16
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
回复 7楼 青春无限
好好学习
2012-10-26 12:41
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
回复 6楼 babylco0
非常感谢,弄懂了
2012-10-26 12:42
真的很菜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:94
专家分:151
注 册:2012-2-18
收藏
得分:0 
回复 5楼 newdos
恩恩,谢谢
2012-10-26 12:44
快速回复:栈的应用的一个迷糊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019684 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved