标题:利用栈判断表达式中的括弧是否匹配 大神帮忙看看啊 好多错误 心态爆炸了
只看楼主
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
结帖率:75%
已结贴  问题点数:20 回复次数:2 
利用栈判断表达式中的括弧是否匹配 大神帮忙看看啊 好多错误 心态爆炸了
#include"stdio.h"
#define MAXSIZE  1024   
typedef  struct
  {datatype data[MAXSIZE];
   int  top;
  }SeqStack;
  SeqStack *Init_SeqStack()
{   SeqStack  *s;
     s=malloc(sizeof(SeqStack));
     s->top= -1;  
     return s;
int Empty_SeqStack(SeqStack *s)
{    if (s->top== -1) return 1;
            else return 0;
}
int Push_SeqStack (SeqStack *s,datatype  x)
{    if (s->top==MAXSIZE-1)  return 0; /*栈满不能入栈*/
      else {  s->top++;
                 s->data[s->top]=x;
                 return 1;}
 }
int Pop_SeqStack(SeqStack *s,datatype *x)
{  if  (Empty_SeqStack ( s ) )  return 0;  /*栈空不能出栈 */
    else { *x=s->data[s->top];
              s->top--;  
              return 1; }        /*栈顶元素存入*x,返回*/
 }
int Top_SeqStack(SeqStack *s,datatype *x)
   { if ( Empty_SeqStack ( s ) ) return 0;  /*栈空*/
      else
       {
              *x=s->data[s->top];
               return 1;
       }
   }
void Destroy_SeqStack(SeqStack *s)
   {
    if(*s)
            {
                  free(*s);
                  *s=NULL;
            }
   }
   int correct(char*exp)
   { int i=0;
     DataType x;
     PSeqStack st;
     if((st=createEmptyStack_seq())==NULL)return 0;    /*创建空栈*/
     do    /*依次读入每个字符*/
     {x=*(exp+i);
       switch(x)    /*三种括号单独配对*/
       {case'{':case'[':case'(':
           push_seq(st,x);
           break;
       case')';
           x=top_seq(st);
           if(x!='(')return 0;
           pop_seq(st);
           break;
       case')';
           x=top_seq(st);
           if(x!='[')  return 0;
           pop_seq(st);
       break;
       case'}':
           x=top_seq(st);
           if(x!='{')return 0;
           pop_seq(st);
           break;
       default:
       break;
       }
       i++;
     }while(x!='\0');
     return 1;
   }
搜索更多相关主题的帖子: 表达式 return include 
2017-03-18 15:53
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
得分:20 
这组代码我真的看的略微尴尬:
1. 你定义的各个变量表达什么意思,请注释清楚
2.main函数在哪里?
3.你的函数调用。。不想说了
4.你的逻辑也有问题。
5.给你改了一个版本,基本能运行,肯定还有很多问题。
6.这个最关键:请注意你的代码格式!!!!!!请注意你的代码格式!!!!!!请注意你的代码格式!!!!!!请注意你的代码格式!!!!!!
7.接下来,你可以谢谢我了。
程序代码:
#include"stdio.h"
#define MAXSIZE  1024
#define datatype char

typedef  struct
  {datatype data[MAXSIZE];
   int  top;
  }SeqStack,*PSeqStack;

SeqStack *Init_SeqStack()
{   SeqStack  *s;
     s=malloc(sizeof(SeqStack));
     s->top= -1;
     return s;
}//少括号这种问题不要再犯了

int Empty_SeqStack(SeqStack *s)
{    if (s->top== -1) return 1;
            else return 0;
}
int Push_SeqStack (SeqStack *s,datatype  x)
{    if (s->top==MAXSIZE-1)  return 0; /*栈满不能入栈*/
      else
        {  s->top++;
           s->data[s->top]=x;
           return 1;
      }

 }
datatype Pop_SeqStack(SeqStack *s)
{  if  (Empty_SeqStack ( s ) )  return -1;  /*栈空不能出栈 */
    else
        {
            s->top--;
            return s->data[s->top];
        }        /*栈顶元素存入*x,返回*/

 }
datatype Top_SeqStack(SeqStack *s)
{
    if ( Empty_SeqStack ( s ) ) return -1;  /*栈空*/
      else
       {

               return s->data[s->top];
       }
}
void Destroy_SeqStack(SeqStack *s)
{

      free(s);
      s=NULL;
}

int correct(char*exp)
{
    int i=0;
     datatype x;//请统一名称
     PSeqStack st;//请定义变量
     if((st=Init_SeqStack())==NULL)return 0;    /*创建空栈*/
     do    /*依次读入每个字符*/
     {x=*(exp+i);
       switch(x)    /*三种括号单独配对*/
       {
        case'{':
        case'[':
        case'(':
                   Push_SeqStack(st,x);
                   break;
        case')'://这个是什么符号?
                    x=Top_SeqStack(st);
                    if(x!='(')return 0;
                    Pop_SeqStack(st);
                    break;
        case']':
                    x=Top_SeqStack(st);
                    if(x!='[')  return 0;
                    Pop_SeqStack(st);
                    break;
        case'}':
                    x=Top_SeqStack(st);
                    if(x!='{')return 0;
                    Pop_SeqStack(st);
                    break;
        default:;
       }
       i++;
     }while(x!='\0');
     if(*(exp+i-2)=='('||*(exp+i-2)=='{'||*(exp+i-2)=='[')  return 0;
     return 1;
   }

int main()
{
    char*s="()(){[}";
    if(correct(s)) printf("match!\n");
    else
        printf("NOT match!\n");
    return 0;
}


  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-03-18 16:57
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
得分:0 
回复 2楼 Alien_Lee
7.谢谢!!!刚开始学数据结构 好多东西都搞不懂也不理解
关于数据类型定义那里打了代码自己也不知道自己定义的是什么 然后思路也很混乱

2017-03-18 17:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475220-1-1.html




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

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