CSDN的朋友们,你们好哇哈哈哈哈哈哈哈,我好久没有更新啦!!!
大家猜猜我这段时间都去干啥了哇!没错,去参加学校的生产实习啦歪!每天自己PUA自己写代码:你这么菜,还不认真敲代码?(狗头)
一开始死命的纠结到底水一水实训还是认真搞哇!!最后还是选择踏踏实实搞实训得了,然后刚开始还一边担心15天没有复习考研的内容啊啊啊啊啊啊!实训每天都忙不过来,但是但是但是第一次写大型项目饿了么外卖还是挺挺挺多收获的喔!虽然使用c/c++开发基于MFC对话框使用socket实现服务器端与多客户端商家端通信!现在好多公司都使用QT!
刚开始一直纠结抱怨,昨天结训典礼我获得了唯一一个“优秀个人”奖,还是好开心哈哈哈哈哈,我怎么费事!善变的女孩哇哇哇哇哇!
下面言归正传咯,接着上次的啦!
用顺序栈实现括号匹配~
顺序栈的代码是使用的上次我写的代码!大家也可以自己把所有的重要的数据结构的代码写出来保存起来,到时候就可以拿出来直接用啦~
然后这个地方我使用了函数封装起来这一项功能,这样在主函数就可以直接调用啦~
主要理解的突破点就是:如果匹配不成功,那么就是三种情况!①左括号单身;②右括号单身;③左右括号不匹配!
然后说来奇怪,写完这个,今天中午午睡还梦见我有男朋友了,给我吓醒了哈哈哈,瞬间不想睡午觉了!专心搞事业的🆒!
上代码咯,有什么错误大家也可以指出来一起交流哇!
//使用顺序栈实现括号匹配
/*头文件*/
#include<stdio.h>
#include<string.h>
/*常量定义*/
#define MaxSize 50 //定义栈中元素最大个数
#define TRUE 1
#define FALSE 0
/*存储结构类型(顺序栈)定义*/
typedef char ElemType;
typedef struct //静态存储分配
{
ElemType data[MaxSize]; //存放栈中元素
int top; //栈顶指针
}SqStack;
/*基本操作自定义函数说明*/
int InitStack(SqStack *S); //初始化一个空栈
int StackEmpty(SqStack S); //判断一个栈是否为空
int Push(SqStack *S,ElemType e); //进栈
int Pop(SqStack *S,ElemType *e); //出栈
/*自定义函数声明*/
int BracketCheck(char bracket[],int length);
/*主函数*/
int main()
{
char bracket[50]={0}; //'\0'
int flag;
printf("请输入一行英文括号允许包含()[]{}:\n");
gets(bracket);
//puts(bracket);
flag=BracketCheck(bracket,strlen(bracket));
if(flag==TRUE)
printf("\n括号匹配成功!\n");
else printf("\n括号匹配失败!\n");
return 0;
}
/*基本操作自定义函数定义*/
int InitStack(SqStack *S)
{
(*S).top=-1;
return TRUE;
}
int StackEmpty(SqStack S)
{
if(S.top==-1)
return TRUE;
return FALSE;
}
int Push(SqStack *S,ElemType e)
{
if((*S).top==MaxSize-1) //栈满
return FALSE;
(*S).data[++(*S).top]=e; //区分S.top初始值设为-1(栈顶指针指向当前栈顶元素)和0(栈顶指针指向当前栈顶元素的下一个)
return TRUE;
}
int Pop(SqStack *S,ElemType *e)
{
if((*S).top==-1) //栈空
return FALSE;
*e=(*S).data[(*S).top--];
return TRUE;
}
/*自定义函数实现*/
int BracketCheck(char bracket[],int length)
{
SqStack S;
InitStack(&S);
char ch;
int i;
for(i=0;i<length;i++)
{
if(bracket[i]=='('||bracket[i]=='{'||bracket[i]=='[')
Push(&S,bracket[i]); //左括号入栈
else
{
if(StackEmpty(S)) //如果遇到右括号但是栈空则右括号单身
return FALSE;
Pop(&S,&ch); //弹出栈顶元素
if(bracket[i]==')'&&ch!='(') //左括号右括号不匹配
return FALSE;
if(bracket[i]=='}'&&ch!='{')
return FALSE;
if(bracket[i]==']'&&ch!='[')
return FALSE;
}
}
if(StackEmpty(S)) //结束后判断左括号是否单身
return TRUE;
else return FALSE;
}