利用栈实现括号配对

原创 2018年04月17日 21:27:53
#ifndef _SEQSTACK_
#define _SEQSTACK_
#endif
#include "stdio.h"
#include "math.h"


  typedef struct
  {
      DataType stack [MaxSize];
      
      int top;
      
      int count;
      
      
  } SeqStack;
 
  void StackInitiate (SeqStack *S)
 
  {
      
      S->top =0;
  }
 
  int StackNotEmpty(SeqStack S)
  {
      
      if (S.top<=0)
      {
          
          printf ("\n\nThis Stack is empty !");
          
          return 0;
      }
      
      else  return 1;
  }
 
  int StackPush (SeqStack *S ,DataType x)
  {
      
      
      if (S->top>=MaxSize)
      
      {
          printf ("The stack is full !");
          
          return 0;
      }
      
      else
      
      {
      
        S->stack[S->top]=x;
         
         S->top++;
         
          S->count++;
         
         return 1;
         
           
       }
  }
 
 
  int StackPop(SeqStack *S,DataType *d)
 
  {
      
      if (S->top<=0)
      
      {
          printf ("There is no element to pop !");
          
          return 0;
      }
      
      else
      
      {

        S->top--;    //if stack is empty ,you should make sure that the value of "S->top" is 0
     
         *d=S->stack[S->top];  //this "stack[]" array should be popped begin with "stack[9]" not stack[10],so we should reduce 1 befor we execute the algorithm  in this line
         
        // printf ("%d",S->top);
         
          //S->top--;
          
          S->count--;
         
         return 1;
         
         
      }
  }
 
  int StackTop(SeqStack S,DataType *d)
 
  {
      
      if (S.top<=0)
      {
          
      //printf (" This stack is empty !");
      
        return 0;
   }
   
   else
   {
       
   *d=S.stack[S.top-1];
   
   return 1;
   
   }
      
  }
 
 
 


#include <stdio.h>

#define MaxSize 100

typedef char DataType ;

#include "SeqStack.h"


void main ()

{
    
    char a[MaxSize];
    
    int i,n;
    
    char p,x,s;
    
    SeqStack MyStack;
    
    StackInitiate(&MyStack);
    
    //StackTop(MyStack,&x);    
    
    scanf ("%d",&n);
        
    for (i=0;i<n+2;i++)
    {
        
        scanf ("%c",&a[i]);                        
    
    if (a[i]=='('||a[i]=='<'||a[i]=='[')
    {        
        
        StackPush(&MyStack,a[i]);
    }
    else    if (a[i]=='>'&&(StackTop(MyStack,&x))&&(x=='<'))
    {
                            
            StackPop(&MyStack,&p);                                      
        
    }
    else    if (a[i]=='>'&&(StackTop(MyStack,&x))&&(x!='<'))
    {
              printf ("\n wrong \n");                
        return ;                                  
        
    }
    else    if (a[i]==')'&&(StackTop(MyStack,&x))&&(x=='('))
    {                
        
            StackPop(&MyStack,&p);                
                        
    }
    else    if (a[i]==')'&&(StackTop(MyStack,&x))&&(x!='('))
    {    
                
             printf ("\n wrong \n");
            return ;            
                        
    }
    
        
    else if ((a[i]==']')&&(StackTop(MyStack,&x))&&(x=='['))
    {    
            
            StackPop(&MyStack,&p);    
                                        
    }
    else if ((a[i]==']')&&(StackTop(MyStack,&x))&&(x!='['))
    {    
    
     printf ("\n wrong \n");
            
            return ;    
                                        
    }
        else if (n%2!=0)
    {    
    
     printf ("\n wrong \n");
            
            return ;    
                                        
    }
   }

    if (StackNotEmpty(MyStack))
    {
        
       printf ("\nThis array of character can not make a pair!\n");
       
       StackTop(MyStack,&p);
       
       printf ("%c",p);
       
//    printf ("\n%d\n",MyStack.count);
    
    }
    
    else
    
    printf ("\nThis array of character can make a pair!\n");        
    
}

 
 
 
 
 
 

利用栈实现括号匹配的检验

  • 2014年05月26日 20:18
  • 180KB
  • 下载

栈之括号配对

题目描述: 设表达式中包含三种括号:圆括号,方括号和花括号,它们可以互相嵌套,如([{}])和{{()[]}}等均为正确的格式,而{[(])}和{(}均为不正确的格式。 算法思想: 检验算法中可设...
  • l2580258
  • l2580258
  • 2016-04-18 20:06:12
  • 222

栈用于解决括号匹配问题

在编写程序的过程中,我们经常需要对一串括号是否匹配进行判断。如何判断呢?我们可以借助栈来进行判断。基本思路是:遍历字符串,当发现有右括号而此时的栈顶元素又恰好是与之匹配的左括号时,则栈顶元素出栈;其余...
  • kelvinmao
  • kelvinmao
  • 2016-04-07 23:01:26
  • 1884

“顺序栈”判断表达式中的括号是否正确配对

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:date.cpp * 作 者:单昕昕 ...
  • MIKASA3
  • MIKASA3
  • 2016-03-31 20:32:56
  • 2128

“链栈”判断表达式中的括号是否正确配对

问题及代码: /* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:d...
  • MIKASA3
  • MIKASA3
  • 2016-03-31 20:25:35
  • 867

C++ 用栈实现字符串中括号匹配问题()

使用C++中的stack容器可以很容易的实现字符串中括号的匹配判断问题: #include #include #include using namespace std; int main...
  • hezikui1987
  • hezikui1987
  • 2013-08-01 20:20:15
  • 2965

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

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

C++STL库栈算法的括号匹配

很久没写了,原因是懒惰……另外大一在学校也难上网……不说了 昨天晚上看了C++的STL库,感觉C++功能非常的强大呢! 于是刚好想起了以前用C写了一个括号匹配,很复杂,具体思路是先把括号转换为...
  • giglf
  • giglf
  • 2015-03-21 00:26:34
  • 1074

Java 用栈解决括号匹配问题

在南阳理工ACM看到的一道题 问题描述:问题描述 : 输入一个字符串 里面只含有 [ , ] , ( , ) 四种括号 ; 现要求判断这个字符串 是否满足括号匹配  如    ([])()    ...
  • qq_26331127
  • qq_26331127
  • 2015-12-08 17:55:52
  • 4601

[NYOJ] 02括号配对问题(c语言链栈实现)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难...
  • the_victory
  • the_victory
  • 2016-10-04 15:15:53
  • 1232
收藏助手
不良信息举报
您举报文章:利用栈实现括号配对
举报原因:
原因补充:

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