| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 623 人关注过本帖
标题:栈的应用 括号的匹配问题
只看楼主 加入收藏
我是大懒虫
Rank: 2
等 级:论坛游民
帖 子:11
专家分:19
注 册:2013-3-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
栈的应用 括号的匹配问题
本人是一个刚学数据结构的菜菜鸟,想实现一下书本的所有代码,当打到链栈的应用就不会了
我试过下面的代码,当执行到遇到case)或者case]的时候时if的执行语句就不会执行了
跪求大神

链栈的定义

typedef char SElemType;
typedef struct StackNode{
    SElemType data;
    struct StackNode *next;
}StackNode,*LinkStack;
bool InitStack(LinkStack &S);

bool StackLength(LinkStack S);
bool GetTop(LinkStack S,SElemType &e);//用E返回S的栈顶元素
bool Push(LinkStack &S,SElemType e);//插入元素E为新的栈顶元素
bool Pop(LinkStack &S,SElemType &e);//删除S的栈顶元素,并用E返回其值
bool Matching();//括号的匹配

//链栈的初始化
bool InitStack(LinkStack &S)
{
    S=new StackNode;
    S->next=NULL;
    return true;
}
//栈的长度
bool StackLength(LinkStack S)
{
    int Length=0;
    while(S->next!=NULL)
    {
        Length++;
        S=S->next;
    }
    return true;
}
//返回栈顶元素
bool GetTop(LinkStack S,SElemType &e)
{
    if(S==NULL) return false;
    e=S->data;
    return true;
}
//添加元素
bool Push(LinkStack &S,SElemType e)
{
    LinkStack p;
    p=new StackNode;
   
    p->data=e;
    p->next=S;
    S=p;
    return true;
}
//删除栈顶元素
bool Pop(LinkStack &S,SElemType &e)
{
    LinkStack p;
    p=S;
    e=S->data;
    S=p->next;
    delete p;
    p=NULL;
    return true;
}




//括号的匹配
bool Matching()
{

    LinkStack S;
    InitStack(S);//初始化栈
    int flag=1;
    char c,e;
    cin>>c;
    while(c!='#'&&flag)//想写一个循环输入判断
    {
        switch(c)
        {
          case '['||'('://这样写可以吗?
            Push(S,c);
        
            break;
          case')':
            GetTop(S,e);
            if(StackLength(S)!=0&&e=='(')
                Pop(S,e);
            else flag=0;
            break;
          case']':
            GetTop(S,e);
            if(StackLength(S)!=0&&e=='[')
                Pop(S,e);
            else flag=0;
            break;
        }
        cin>>c;
    }
    if(StackLength(S)!=0&&flag==0)
        return false;
    return true;
}
主函数
int main()
{
    cout<<"请输入符号:";
    Matching();
    return 0;
}
搜索更多相关主题的帖子: 元素 
2013-04-07 23:33
我是大懒虫
Rank: 2
等 级:论坛游民
帖 子:11
专家分:19
注 册:2013-3-30
收藏
得分:0 
哈哈,我终于搞定它了,原来第一个case是不能或这样写的,分开就可以了,虽然没有人回帖,不过自己坐自己的沙发挺好的
2013-04-09 00:12
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:20 
case '['||'('://这样写可以吗?

这样写不会报错 但是他是是什么意思呢
case 后接一个常量表达式 这里 '['||'(' 就是这个常量表达式 他 等于常量值1
所以 只有当是一个ASCII为1的字符时才会被执行 而不是想当然的 [ 或 ( 的时候
应该写成
case '[':
case '(':

人生是一场错过 愿你别蹉跎
2013-04-09 12:26
我是大懒虫
Rank: 2
等 级:论坛游民
帖 子:11
专家分:19
注 册:2013-3-30
收藏
得分:0 
回复 3楼 fanpengpeng
原来是这样,谢谢你了。
发帖后一天我才我知道是那里错了,但是不知道是怎么回事,谷歌又找不到答案。
还有就是我在switch结束时再加一个判断。这样觉得程序更好了。
呵呵,现在知道了原来书本的代码都不是可以实现的
2013-04-09 23:50
快速回复:栈的应用 括号的匹配问题
数据加载中...
 
   



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

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