当前位置:首页 » 操作系统 » 括号匹配算法

括号匹配算法

发布时间: 2022-01-15 19:08:35

㈠ 括号匹配

//这是写的源码,你自己看看吧,我这边调试过了,运行正常
#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);
}

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

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

㈢ 括号匹配 基本算法

用栈的数据结构

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

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

㈣ 括号配对的算法

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;}

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

㈥ 数据结构:括号匹配问题。

include "seqstack1.h"

include "stdio.h"

void BracketMatch(char str);

void BracketMatch(char str) /*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();
}

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

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

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

算法如下:

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

热点内容
安卓机怎么关闭主题 发布:2024-12-26 21:55:57 浏览:915
javafor线程 发布:2024-12-26 21:54:35 浏览:744
python自定义模块 发布:2024-12-26 21:41:37 浏览:57
linux安装mysqltar 发布:2024-12-26 21:18:02 浏览:315
浏览器的java支持 发布:2024-12-26 21:15:45 浏览:655
电商高管如何配置 发布:2024-12-26 21:13:48 浏览:709
批发的算法 发布:2024-12-26 21:13:46 浏览:208
安卓手机在日本下载哪个导航 发布:2024-12-26 21:09:32 浏览:560
白噪声加密 发布:2024-12-26 20:31:02 浏览:641
怎么防止电脑删除脚本 发布:2024-12-26 20:19:19 浏览:153