| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1271 人关注过本帖
标题:用顺序栈判断括号是否配对
取消只看楼主 加入收藏
蛋壳
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-11-13
收藏
 问题点数:0 回复次数:0 
用顺序栈判断括号是否配对

问题描述:利用栈的基本操作实现一个判断算术表达式中包含圆括号,方括号是否正确配对的程序.
基本要求:
1.定义栈的顺序存取结构.
2.分别定义栈的基本操作(初始化,判空,入,出栈等)
3.定义一个函数来判断算术表达式,出现4种情况:左右括号配对次序不正确,右括号多于左括号,
左括号多于右括号,左右括号匹配成功,
4.设计测试函数进行测试


程序如下:

#include "stdio.h"
#include "stdlib.h"
#define MAX 100
typedef struct { char abc[MAX];
int top;
}stack;
int m,n;
int sign;

void initstack(stack *s)
{ s->top=-1; }


void push(stack *s,char ch)
{
if(s->top==MAX-1)
{ printf("stack is full!");}
else
s->abc[++s->top]=ch;
}


void pop(stack *s,char *ch)
{
if(s->top==-1)
{ printf("stack is empty!"); }
else
{ *ch=s->abc[s->top--];

}

int empty(stack s)
{
if(s.top==-1)
return(1);
else
return(0);
}

int test()
{ stack s;
char ch;
initstack(&s);
while((ch=getchar())!='\n')
{ switch(ch)
{ case'(' :
m++;
push(&s,ch);
break;
case'[':
m++;
push(&s,ch);
break;
case'{':
m++;
push(&s,ch);
break;
case(ch==')'):
if(emptyy(s))
sign=1;
else
{ pop(&s,&ch);
if(ch!='(')
sign=1;
}
break;
case(ch==']'):
if(empty(s)
sign=1;
else
{ pop(&s,&ch);
if(ch!=']')
sign=1;
}
break;
case(ch=='}'):
if(empty(s))
sign=1;
else
{ pop(&s,&ch);
if(ch!='}')
sign=1;
}
break;
default:break;
}
}
if(sign==1)
return(2);
if(empty(s))
return(3);

}


main()
{ m=0;
n=0;
sign=0;
int i;
printf("please input the equation:\n");
i=test();
switch(i)
{ case(2):
if(m>n)
printf(" zuo > you \n");
if((m==n)
printf(" zuo != you \n");
if(m<n)
printf(" zuo < you \n");
break;
case(3):printf("you !=zuo \n");break;

default:break;

搜索更多相关主题的帖子: 括号 顺序 配对 判断 
2006-11-15 12:41
快速回复:用顺序栈判断括号是否配对
数据加载中...
 
   



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

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