导航:首页 > 源码编译 > 括号匹配算法

括号匹配算法

发布时间:2022-01-12 11:26:51

❶ 用C语言写出三种括号匹配的算法(小括号,中括号,花括号)

❷ 括号匹配 基本算法

用栈的数据结构

先读入一个括号,如果为左括号,入栈,否则,出错退出
继续读入括号,如果是右括号,检查栈,如果非空,出栈(因为不把右括号入栈,所以栈里面都是左括号),如果空,出错退出

直到读完处理完最后一个括号,如果这个时候栈为空,那么成功返回true,否则返回false

❸ 数据结构括号匹配的算法问题

return0 就是不匹配,return 1 就是匹配,最后判断栈是不是空的,栈如果是空的,说明匹配了,返回 1 ,如果不是空的,说明还有左括号,匹配失败

❹ 求多项式中括号匹配算法~~(有关数据结构,C++实现)

括号可以用栈来匹配啊, 数据结构中的运算符优先法就是用栈实现的,
左右括号都是运算符,规定(优先级最底,要入栈到运算符栈, 其他运算符优先都要高于( 但低于),其他运算符之间的优先关系暂且忽略不说,也就是当读取到) 的时候, 括号内运算一定会结束并得出一个结果进入到操作数栈(由于 ) 的优先级比其他所有运算符都高,其他运算符要出栈运算,并且把结果入到操作数栈),然后就是检查操作数栈栈顶是否是左括号,如果是在左括号出栈,这样左右括号就一起消掉,如果不是,则报错,你要检查你的运算符优先表的定义,因为根据定义,到读取到右括号的时候,括号内的运算会结束并得出结果, 空括号不影响计算, 只是没有操作数入栈而已,而且可以嵌套括号 , 规定好了优先级,可以实现多种不同优先级的括号的混合运算

❺ 括号配对的算法

void peii(void)前部有个
scanf("%c",&data);
这里data获取了一个字符,但是用来确定的<CR>还在IO流中,所以后面第一个
scanf("%c",&data);
直接得到了<CR>,而不需要等待你的输入,接着执行第二个,IO流中已经没有字符了,所以等待你的输入.

这就是为什么你的一条语句的话直接跳过,二条语句的话入等待你的输入.

❻ 数据结构 括号匹配算法

楼上说的是一个原因,不过去掉!StackEmpty(S)后问题依旧。
你的原因主要是这里:
case ')':{Pop(S,e);
if(e!='(') flag=1; break;}

应该先判断,再出栈。不能先出栈再判断。

❼ 数据结构栈应用括号匹配算法

算法如下:

从左开始向右扫描该表达式,
1、如遇左括号(不论哪一种),将该左括号入栈;
2、如是右括号,如栈为空则返回出错信息,不空就检查其是否与栈顶左括号是否配对,如是则栈顶元素出栈后继续扫描(转1 ),否则,返回出错信息(出错类型:右括号先出现,或左右括号不匹配,出错位置);
3、如是其它字符,直接跳过,继续扫描,如表达式未完则转1;表达式结束转4。
4、如栈空,显示“匹配正确!”,否则显示“缺失右括号!”。

❽ 括号匹配

//这是写的源码,你自己看看吧,我这边调试过了,运行正常
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_SIZE 100
#define MAX_STR_SIZE 100

typedef struct
{
char s[STACK_SIZE];
int top;
}Stack;

//输入要判别的字符串
void inputStr(char str[])
{
char ch;
int i=0;
printf("请输入串(以'#'结束):");
while(((ch=getchar())!='#')&&i<MAX_STR_SIZE-1)
{
str[i]=ch;
i++;
}
str[i]='#';
}
//初始化栈
Stack *initStack(Stack *stack)
{ stack=(Stack *)malloc(sizeof(Stack));
stack->top=-1;
return stack;
}
//判断栈是否为空
int isStackEmpty(Stack *stack)
{
if(stack->top==-1)
return 1;
else
return 0;
}
char getElem(Stack *stack)
{
return stack->s[stack->top];
}
void push(Stack *stack,char ap)
{
stack->top++;
stack->s[stack->top]=ap;
}
void pop(Stack *stack)
{
stack->top--;
}
//判断
void pipei(char str[])
{
Stack *stack;
char c;
int i=0;

stack=initStack(stack);

while(str[i]!='#')
{
if(str[i]>='A'&&str[i]<='Z')
{
if(!isStackEmpty(stack))
{
c=getElem(stack);
if((c+str[i]==155)&&(c<str[i]))
pop(stack);
else
push(stack,str[i]);
}
else push(stack,str[i]);
}
i++;
}
if(isStackEmpty(stack))
printf("\n该串是一个匹配表达式!\n");
else
printf("\n该串不是一个匹配表达式!\n");

}
//串输出
void outputStr(char str[])
{

}
main()
{

char str[MAX_STR_SIZE];
inputStr(str);
// outputStr(str);
pipei(str);
}

❾ 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();
}

阅读全文

与括号匹配算法相关的资料

热点内容
程序员为什么大多生闺女 浏览:51
c编程用英文还是中文 浏览:723
一点都不解压的游戏 浏览:203
解压为什么不能用中文文件夹 浏览:615
服务器如何解除备份 浏览:144
安卓手机为什么用一年就变卡 浏览:11
如何用风变编程自动回复 浏览:512
安卓阅读币怎么样 浏览:437
京东app怎么切号 浏览:583
进入传奇服务器后如何修改 浏览:42
m0单片机的cycle怎么知道 浏览:806
linux命令太长 浏览:782
压缩机nb1111y是多少w 浏览:45
打赏视频用什么服务器好 浏览:154
方舟好友服务器怎么加mod 浏览:982
javaresponse设置编码 浏览:842
opc数据采集源码 浏览:563
命令女孩子 浏览:691
rtsp录像源码 浏览:388
加密狗复制啥意思 浏览:545