实验三、2栈实现括号匹配问题

/*简单编译器实现(括号配对检查)。通常在编译源代码时判断左右括号是否匹配也是一个重要环节。采用栈实现
算法描述:随机输入一串数学表达式或者带括弧的语句,然后将其存在数组中,然后遍历整个数组,
遇到做括弧就将其入栈,遇到右括号,则将栈顶元素弹出,最后遍历完数组后,看top是否为0,若为0.则说明括号匹配,
否则不匹配。*/

 //不同系统可能会有错误,我在xp上运行时,总是出现内存不能读写的对话框 而在vista上运行正确 不知道为什么?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define m 20
#define elemtype char
typedef struct//栈类型定义
{
 elemtype stack[m]; 
 int top;
}stacknode;
stacknode *sp;
/*void init(stacknode *s)//栈初始化
{
 s->top=0;
 //return ;  
} */
void push(stacknode *s,elemtype x)//将x压入栈中
{
 if(s->top==m)
  printf("栈已满!");
 else
 {
  
  s->top=s->top+1;
  s->stack[s->top]=x; 
 }
}
void popup(stacknode *s)//弹出栈元素
{
  s->top=s->top-1;  
}
int main()
{
 char s[m];
 int i,k;
 printf("create an empty stack!/n");
 //init(sp);
 stacknode *sp;
 sp->top=0;
 printf("please input an expression:/n");
 gets(s);//输入表达式
 for(i=0;i<strlen(s);i++)
 {
  if(s[i]=='(')
   push(sp,s[i]);
  if(s[i]==')')
   popup(sp); 
 }
 if(sp->top==0)
  printf("括号匹配!/n");
 else
  printf("括号不匹配!/n");
 getchar();
 //system("pause");   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值