用栈实现括号匹配逆序输出和括号匹配

栈的应用+括号匹配算法的实现
实验三栈的应用
一、实验属性&&&
二、实验目的&&
三、实验环境及知识准备
四、实验内容&
五、实验要求及步骤
六、实验指导
七、注意事项
提高内容:
八、实验报告内容及要求
"stdlib.h"
#define OVERFLOW
#define OK
#define ERROR
STACK_INIT_SIZE 100 &// 栈的大小
STACKINCREMENT 10 & //栈增长
typedef int S
typedef char
typedef struct
& SElemType * &
& SElemType * &
& & //栈顶
//栈的大小
//初始化一个空栈
&InitStack_Sq(SqStack * S){
& S-&base =(SElemType
*)malloc(STACK_INIT_SIZE*sizeof(SElemType));// malloc
用来分配内存
& if(!(S-&base))
exit(OVERFLOW);
&//退出程序
& S-&top = S-&
& S-&stacksize =
STACK_INIT_SIZE;
& 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+STACKINCREMENT)*sizeof(SElemType));
(!S-&base) exit(OVERFLOW);
S-&stacksize += STACKINCREMENT;
& *(S-&top)=e;
& (S-&top)++;
& return OK;
Status Pop(SqStack *
S,SElemType * e){
& if(S-&top == S-&base) return
& *e = *(--S-&top);
& return OK;
//判断栈是否为空
EmpyStack(SqStack S){
& if(S.top == S.base)
& & & return
& else return 0;
//括号匹配
void brackets(char
& SqStack S;
& InitStack_Sq(&S);
& while(p &&(*p != '\0')){
switch(*p){
& & case '(':{Push(&S,
*p);p++; printf("左括号 ( 进栈成功!\n"); };
& & case '[':{Push(&S,
*p);p++; printf("左括号 [ 进栈成功!\n"); };
& & case '{':{Push(&S,
*p);p++; printf("左括号 { 进栈成功!\n"); };
& & case ')':{
& if(!EmpyStack(S)){
& & & getTop(S,
& & & if(e ==
printf("括号 )
匹配成功!\n");
Pop(&S,&e);
& & printf("括号 )
不匹配!\n");
printf("右括号 ) 是多余的!\n");
& & case ']':{
& if(!EmpyStack(S)){
& & & getTop(S,
& & & if(e ==
printf("括号 ]
匹配成功!\n");
Pop(&S,&e);
& & printf("括号 ] 不匹配
printf("右括号 ] 是多余的!\n");
& & case '}':{
& if(!EmpyStack(S)){
& & & getTop(S,
& & & if(e ==
printf("括号 }
匹配成功!\n");
Pop(&S,&e);
& & printf("括号 } 不匹配
printf("右括号 } 是多余的!\n");
& & default:p++;
&if(EmpyStack(S))
printf("正确匹配!\n");
printf("左括号有余!\n");}
& //scanft(“%s”,&ch);
& gets(ch);
& brackets(ch);
& return 0;
Cx运行截图
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看:2219|回复:2
复制内容到剪贴板代码://**********************************************
//用栈实现括号的匹配问题
//**********************************************
#include&iostream&
#include&cctype&
const int N=10;//记录栈的长度
char *top,*//全局变量
int insert(char *a)//插入栈
& && &&&top=base=a;
& && &&&if(top-base==N)
& && && && && & {
& && && && && && && && &cout&&&栈满&;
& && && && && && && && &return 1;
& && && && && & }
& && &&&int flag=1;
& && &&&cout&&&输入要插入的括号:&;
& && &&&cin&&e;
& && &&&while(e!='#'&&flag)
& && && && && & switch(e)
& && && && && & {
& && && && && & case '('||'['://如果是左括号,则入栈
& && && && && && && && &{
& && && && && && && && && && &&&*top=e;
& && && && && && && && && && &&&top++;
& && && && && && && && && && &&&
& && && && && && && && &}
& && && && && & case ')':
& && && && && && && && &{
& && && && && && && && && && &&&if(top!=base&&*(--top)=='(')//若栈非空且栈顶元素是'(',则匹配成功
& && && && && && && && && && && && && & cout&&&输出匹配成功&&&
& && && && && && && && && && &&&else
& && && && && && && && && && && && && & flag=0;
& && && && && && && && && && &&&
& && && && && && && && &}
& && && && && & case ']':
& && && && && && && && &{
& && && && && && && && && && &&&if(top!=base&&*(--top)=='[')//若栈非空且栈顶元素是'(',则匹配成功
& && && && && && && && && && && && && & cout&&&输出匹配成功&&&
& && && && && && && && && && &&&else
& && && && && && && && && && && && && & flag=0;
& && && && && && && && && && &&&
& && && && && && && && &}
& && && && && & }
& && && && && & cout&&&请继续输入要插入的括号:&;
& && && && && & cin&&e;
int main()
& && &&&char a[N];//开辟栈空间
& && &&&int flag=insert(a);
& && &&&if(flag==1)
& && && && && & cout&&&最后匹配成功&&&
& && &&&if(flag==0)
& && && && && & cout&&&最后匹配不成功&&&
& && &&&return 0;
}好像有些问题,请高手指正,多谢
鼓励午饭积极发帖提问哈
中级工程师
jy你好,case语句没有你这样的用法哦,你可以从此下手对自己的代码进行检查,如若还有问题,再回来继续讨论:(mars_20):引用:原帖由 jy 于
14:19 发表
//**********************************************
//用栈实现括号的匹配问题
//**********************************************
const int N=10;//记录栈的长度
char *t ...
The best of man is like water
Which benefits all things, and does not contend with them
Which flows in places that others disdain
Where it is in harmony with the Way
可是版主,我是按照一个算法写的程序,算法就是用case的,思路貌似没错,肯定是哪里出了逻辑错误了,你能帮我看看嘛
本版版规,回帖即得2无忧币

我要回帖

更多关于 栈的应用括号匹配 的文章

 

随机推荐