括弧匹配演算法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!='