#include <stdio.h>
#include <malloc.h> //malloc,realloc
#include <math.h> //含有overflow
#include <process.h> //exit()
#define S_SIZE 100 //栈的空间大小
#define STACKINCREAMENT 10//增加空间
struct SqStack{
int *base; //栈底
int *top; //栈顶
int stacksize; //栈当前的存储空间
};
int main()
{//子函数声明
void InitStack(SqStack &S);//初始化空栈
int StackEmpty(SqStack S);//判空
void push(SqStack &S,int e);//进栈
int pop(SqStack &S,int &e);//出栈
//主函数开始
while(1) {
SqStack s;//初始化空栈
InitStack(s);
char ch[100],*p;int e;
p=ch;int flag =1;
printf("输一个含义有()[]{}的括号表达式:\n");
gets(ch);
while(*p)
{
switch (*p)
{
case '{':
case '[':
case '(': push(s,*p++);break;//只要是左括号就入栈
case '}':
case ']':
case ')':if(pop(s,e)) {exit(OVERFLOW);flag = 0;}
if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')'))
p++;
else
{printf("括号不匹配!");exit(OVERFLOW);}
break;
default :p++;//其他字符就后移
}
}
if (StackEmpty(s)&&flag)
printf("括号匹配成功");
else if(flag)
printf("缺少右括号!");
printf("\n");
}
}
void InitStack(SqStack &S)
{S.base=(int *)malloc(S_SIZE*sizeof(int));
S.stacksize=S_SIZE;
S.top=S.base;//初始化空栈
}
int StackEmpty(SqStack S)
{
if(S.base==S.top)
return 1;
else
return 0;
}
void push(SqStack &S,int e)
{//进栈
if(S.top-S.base>=S.stacksize)
{S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREAMENT;}
*(S.top)=e;
S.top++;
}
int pop(SqStack &S,int &e)
{//出栈
if(S.base!=S.top)
{S.top--;
e=*S.top;return 0;}
else {
printf("缺少左括号\n");return 1;}
}
括号匹配(栈实现)
原创include12138 ©著作权
©著作权归作者所有:来自51CTO博客作者include12138的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:四则运算 C++ 栈实现

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
栈练习——括号匹配
括号匹配#include<iostream>#include<string>#include<cstring>using namespace std;#def
括号匹配 栈 数据结构 C++ #define -
栈括号匹配问题(C++实现)
使用栈解决括号匹配问题。主要的点在于简化处理逻辑,有些不必要处理的字符就不需要入栈,只对三种括号字符入栈。
算法 字符串 #include 入栈 ios -
栈的应用之括号匹配
栈的应用之括号匹配首先我们来分析都有什么情况1、右括号比左括号多
括号匹配 入栈 压栈 -
栈2--括号的匹配
栈2--括号的匹配 一、心得 二、题目及分析 有(和),如果匹配输出1,如果不匹配输出0。 三、代码及结果
栈 微信 人工智能 大数据 ios -
C++ 栈的括号匹配
总结归纳算法思想: 设置一个空栈,顺序读取括号。读取左括号时,将括号入栈;读取右括号时,弹出栈顶元素,
c++ 数据结构 入栈 出栈 i++