括号匹配算法
㈠ 括号匹配
//这是写的源码,你自己看看吧,我这边调试过了,运行正常
#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、如栈空,显示“匹配正确!”,否则显示“缺失右括号!”。