加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

判别表达式中开、闭括号是否配对出现的算法

(2011-05-31 15:41:36)
标签:

杂谈

分类: 数据结构

3.18② 试写一个判别表达式中开、闭括号是否配对出现的算法。

实现下列函数:
Status MatchCheck(SqList exp);


顺序表类型定义如下:
typedef struct {
    ElemType *elem;
    int       length;
    int       listsize;
} SqList;  // 顺序表

 

Status MatchCheck(SqList exp)



{
  ElemType *cur,*top,*base;  
  base=exp.elem;//模拟栈底
  top=cur=base+1;//模拟栈顶(top)和当前元素(cur)
  if(')'==*cur)
  {
    return FALSE;
  } //判断第一个字符是否为右括号
  if(0==exp.length)
  {
    return TRUE;
  }//判断是否为空顺序表
  while(cur<=base+exp.length-1)
                            //依次遍历
    if('('==*cur)
                   //当元素为左括号时
      if(top!=cur)
      {
        *top=*cur;      //如果*top!=*cur时就把置0,
        *cur='0';
      }
      ++top;
            //top始终指向第二个元素
    else if(')'==*cur)
    {
      if(top==base)
      {
        return FALSE;
      }
      if('('==*(top-1))
      {
        *(--top)='0';
        *cur='0';
      }
    }
    ++cur;
  }
  if('0'==*base)
  {
    return TRUE;
  }//此处应为base,而不是top
  return FALSE;
}

****************************

{
  ElemType *cur;
  cur=exp.elem;
  int temp=0;
  if(')'==*cur)
  {
    return FALSE;
  } //判断第一个字符是否为右括号
  if(0==exp.length)
  {
    return TRUE;
  }
  while(cur<=exp.elem+exp.length-1)
  {
    if('('==*cur)
    {
      temp++;
    }
    if(')'==*cur)
    {
      temp--;
    }
    if(temp<0)
    {
      return FALSE;
    }
    cur++;
  }
  if(temp==0)
  {
    return TRUE;
  }
  return FALSE;

*******************
两种方法均可行!!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有