顺序栈的操作实现括号匹配问题

原创 2018年04月15日 21:43:54
#include <stdio.h>
#include <stdlib.h>
//201603041067   孔德露
#define STACKINCREAMENT 10//用来栈的增长 
#define MAXSIZE 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int status;
typedef char SElemtype;
typedef struct
{
    SElemtype *base;
    SElemtype *top;
    status stacksize;
}sqstack;
 
//初始化栈
status Init(sqstack *s)
{
    s->base = (SElemtype *)malloc(MAXSIZE* sizeof(SElemtype));
    if(!s->base) 
            exit(OVERFLOW);
    s->top = s->base;
    s->stacksize = MAXSIZE ;
    return OK;
}
 
//获取栈顶元素
status Gettop(sqstack *s, SElemtype e)
{
    if(s->top == s->base) 
            return ERROR;
    e = *(s->top-1);
    return OK;
}
 
//压栈
status push(sqstack *s, SElemtype e)
{
    if(s->top - s->base >= s->stacksize)
    {
      s->base = (SElemtype *)realloc(s->base, (s->stacksize + STACKINCREAMENT) * sizeof(SElemtype));
      if(!s->base)
              exit(OVERFLOW);
      s->top = s->base + s->stacksize;
      s->stacksize += STACKINCREAMENT;
    }
    *s->top++ = e;
    return OK;
}
 
//出栈
status pop(sqstack *s, SElemtype *e)
{
        if(s->top == s->base) 
                return ERROR;
        *e=*--s->top;
        return OK;
}
 
//判断是否为空栈
status stackempty(sqstack *s)
{
        if(s->top==s->base)
            return OK;
        return ERROR;
}
 
//清空栈
status clearstack(sqstack *s)
{
        if(s->top == s->base) 
                return ERROR;
        s->top = s->base;
        return OK;
}
 
//括号匹配算法
status Parenthesis_match(sqstack *s,char *str)
{
        int i=0, flag=0;
        SElemtype e;
        while(str[i]!='\0')
        {
            switch(str[i])
            {
                case '(':
                        push(s,str[i]);
                        break;
                case '[':
                        push(s,str[i]);
                        break;
                case ')':
                        {
                          pop(s,&e);
                          if(e != '(') 
                                  flag=1;
                        }
                        break;
                case ']':
                        {
                          pop(s,&e);
                          if(e!='[')
                                  flag=1;
                        }
                        break;
                default:
                        break;
            }
            if(flag)
                    break;
            i++;
    }
 
   if(!flag && stackempty(s))
        printf("括号匹配成功!");
   else
        printf("括号匹配失败!");
   return OK;
}
 
int main()
{
    char str[100], enter;
    sqstack s;
    Init(&s);
    printf("请输入字符串:");
    scanf("%s",str);
    scanf("%c",&enter);
    Parenthesis_match(&s,str);
    return 0;
}

数据结构(八) 用顺序栈解决括号匹配的问题

//用栈括号匹配的问题  //采用的存储结构为顺序存储结构  #include   using namespace std; #define MAXSIZE 100  //栈的结构体 ...
  • liuxuefeng12
  • liuxuefeng12
  • 2016-12-31 13:12:24
  • 281

利用顺序栈实现多项式的括号匹配

1.括号匹配函数如下: 2.下面是主函数: 3.源文件与头文件的关系: 4.调用的pop(出栈)函数与push(进栈)函数: void SeqStack::Push(const int& x...
  • sinat_34927324
  • sinat_34927324
  • 2016-11-19 20:13:22
  • 478

用顺序栈解决括号是否匹配

我的程序编译成功了但是好像只能操作两个字符的字符串,长的字符串结果都是printf("对应的左右括号不是一类的。\n"); 求大神帮忙解答一下 #include #include ...
  • BaiLizhe10
  • BaiLizhe10
  • 2017-11-02 18:52:25
  • 45

利用顺序栈实现括号匹配

#include #include #include #include #define TRUE 1 #define FALSE 0 #define OVERFLOW 0 ...
  • wangjianxin97
  • wangjianxin97
  • 2017-11-09 20:59:01
  • 33

C语言实现顺序栈的括号匹配

//顺序栈的使用举例:括号的匹配 #include #include #define OK      1 #define ERROR   0 #define TRUE    1 ...
  • u012913936
  • u012913936
  • 2015-07-08 21:48:46
  • 1698

[ACM] 括号匹配问题(栈的使用)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0...
  • sr19930829
  • sr19930829
  • 2014-04-05 13:18:47
  • 2984

数据结构作业 栈 实现 括号匹配 问题

数据结构作业 栈 实现 括号匹配 问题
  • qq_33406883
  • qq_33406883
  • 2016-10-24 18:35:48
  • 1713

一类括号匹配问题

/* 一类括号匹配问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在程序设计中,常常使用小括号强调表达式的运算顺序,但是,左右小括号必须匹配。现给定一个不多...
  • u014391294
  • u014391294
  • 2014-05-28 19:42:11
  • 748

c++括号匹配问题 c++括号匹配问题

  • 2011年07月27日 11:10
  • 845KB
  • 下载

C实现的括号匹配问题,主要由栈实现

  • 2009年12月23日 22:13
  • 2KB
  • 下载
收藏助手
不良信息举报
您举报文章:顺序栈的操作实现括号匹配问题
举报原因:
原因补充:

(最多只允许输入30个字)