括号匹配算法c语言
发布时间: 2022-12-15 17:41:40
1. c语言括号配对问题
#include<stdio.h>
int main()
{
int n,j,i;
scanf("%d",&n);
for(;n>0;n--)
{
char s[1000]={0}; //不超过1000表示最示最大1000个字符,要给\0留个位置
scanf("%s",s);
j=0; //j每次都要在这里赋初值0
for(i=0;s[i];i++)
{
if(s[i]==')')
{
j--;
if ( j<0 ) //遇到)就要看前面是否有过( ,没有过,则说明不匹配了
break;
}
else
if(s[i]=='(')
j++;
}
if(j==0)printf("Yes\n");
else
printf("No\n");
}
return 0;
}
2. C#括号匹配问题算法
constCharRIGHT='}';
constCharLEFT='{';
staticvoidMain(string[]args)
{
Queue<Char>queue=newQueue<Char>();
StringtargetValue="sd{{}";
BooleanisValid=true;
foreach(CharitemintargetValue)
{
if(item.Equals(LEFT))queue.Enqueue(item);
if(queue.Count>0&&!item.Equals(RIGHT)&&!item.Equals(LEFT)){
isValid=false;
break;
}
if(queue.Count>0&&item.Equals(RIGHT))queue.Dequeue();
}
if(isValid&&queue.Count==0)Console.WriteLine("匹配");
elseConsole.WriteLine("不匹配");
Console.ReadKey();
}
3. c语言表达式求值括号匹配
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#defineMaxSize50
typedefstruct
{
floatdata[MaxSize];
inttop;
}OpStack;
typedefstruct
{
chardata[MaxSize];
inttop;
}SeqStack;
voidInitStack(SeqStack*S);//初始化栈
intStackEmpty(SeqStackS);//判断栈是否为空
intPushStack(SeqStack*S,chare);//进栈
intPopStack(SeqStack*S,char*e);//删除栈顶元素
intGetTop(SeqStackS,char*e);//取栈顶元素
voidTranslateExpress(chars1[],chars2[]);//将中缀表达式转化为后缀表达式
floatComputeExpress(chars[]);//计算后缀表达式的值
voidmain()
{
chara[MaxSize],b[MaxSize];
floatf;
printf("请输入一个算术表达式: ");
gets(a);
printf("中缀表达式为:%s ",a);
TranslateExpress(a,b);
printf("后缀表达式为:%s ",b);
f=ComputeExpress(b);
printf("计算结果:%f ",f);
}
voidInitStack(SeqStack*S)//初始化栈
{
S->top=0;
}
intStackEmpty(SeqStackS)//判断栈是否为空
{
if(S.top==0)
return1;
else
return0;
}
intPushStack(SeqStack*S,chare)//进栈
{
if(S->top>=MaxSize)
{
printf("栈已满,不能进栈!");
return0;
}
else
{
S->data[S->top]=e;
S->top++;
return1;
}
}
intPopStack(SeqStack*S,char*e)//删除栈顶元素
{
if(S->top==0)
{
printf("栈已空 ");
return0;
}
else
{
S->top--;
*e=S->data[S->top];
return1;
}
}
intGetTop(SeqStackS,char*e)//取栈顶元素
{
if(S.top<=0)
{
printf("栈已空");
return0;
}
else
{
*e=S.data[S.top-1];
return1;
}
}
voidTranslateExpress(charstr[],charexp[])//把中缀表达式转换为后缀表达式
{
SeqStackS;
charch;
chare;
inti=0,j=0;
InitStack(&S);
ch=str[i];
i++;
while(ch!='