C语言实现 数据结构-栈-括号匹配

题目描述

假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。假设表达式长度小于255,左圆括号少于20个。

输入

一行字符串

输出

YES或者NO

样例输入

((1+b)-(a+3))*[email protected]

样例输出

YES

样例输入

(25+x)*(a*(a+b+b)@

样例输出

NO

算法实现:1.利用栈来实现只需要考虑输入的是不是左括号‘(‘ ,右括号‘)‘     2.当是左括号时 就让‘(‘进栈 ,当遇到右括号是‘)‘就出栈。p.s 这里栈我用的静态栈比较简单~     3.考虑栈里‘(‘多余了,则用top判断,如果完全匹配那么栈里的top应该为初始值为等于-1,输出YES,否则输出NO      4.考虑栈元素下溢的问题,比如先输入了一个右括号‘)‘,那么我们直接判断他为NO,P.s:一开始我想如果表达式无所谓输入格式,先输入‘)‘那不是下溢了嘛,后面在输入‘(‘,感觉栈就不太管用了emmm,是我多虑了或者审题不清

#include <stdio.h>
#define maxsize 260
typedef struct stack
{
int top ;
char arr[maxsize];
}STACK ;
void init(STACK * ps);
bool push(STACK * ps ,char val);
void show_stack(STACK * ps);
// char pop(STACK * ps );
bool Match_Brackets(STACK * ps);
bool pop(STACK * ps );
int main()
{
int i,val;
STACK st ;
init(&st);
if(Match_Brackets(&st))
{
printf("YES\n");
}
else
{
printf("NO\n");
}

}

void init(STACK * ps)
{
ps->top = -1;
}
bool Match_Brackets(STACK * ps)
{
char ch,x ;
int flag = 0 ;
while(1)
{
scanf("%c",&ch);
if(ch == ‘@‘)
{
break ;
}
else if(ch==‘(‘)
{
push(ps,ch);
// show_stack(ps);
}
else if(ch==‘)‘)
{
if(pop(ps))
{
// show_stack(ps) ;
}
else
{
return false ;
}
}

}
if(ps->top == -1)
{
return true ;
}
else return false ;
}
bool push(STACK * ps ,char val)
{
if(ps->top == maxsize-1)
{
// printf("栈已满\n");
return false ;
}
ps->arr[++ps->top]=val;
return true ;
}
void show_stack(STACK * ps)
{
int i = ps->top;
while(i!= -1)
{
printf("%c ",ps->arr[i--]);
}
printf("\n");

}
bool pop(STACK * ps )
{
char ch ;
if(ps->top == -1)
{
// printf("栈为空\n");
return false ;
}
else
{
ps->arr[ps->top--] ;
return true ;
}
}

原文地址:https://www.cnblogs.com/cocobear9/p/12582361.html

时间: 2024-10-10 17:42:57

C语言实现 数据结构-栈-括号匹配的相关文章

数据结构上机3栈-括号匹配

#include <stdio.h> #include <malloc.h> #define OK 1 #define OVERFLOW -1 #define ERROR 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char SElemType; typedef int Status; typedef struct{ SElemType * base; SElemType * top; int st

栈&amp;&amp;括号匹配

利用栈的结构性质实现括号匹配 (今天被自己玩死了,'='&&'=='小问题坑死人不偿命) Matbr.h #ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include<string.h> #include<assert.h> using namespace std; typedef char ElemType; #define STACK_MAX_SIZE 100 typedef stru

C语言1557: 数据结构-栈-字符串匹配

题目描述 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配.如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如.输入: [()] 输出:YES,而输入([]), ([])都应该输出NO. 输入 文件的第一行为一个整数n,表示以下有多少个由括好组成的字符串.接下来的n行,每行都是一个由括号组成的长度不超过255的字符串. 输出 在输出文件中有N行,每行都是YES或NO. 样例输入 5 {}{}<><>()()[][]

栈——括号匹配

Scaena Felix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 492    Accepted Submission(s): 214 Problem Description Given a parentheses sequence consist of '(' and ')', a modify can filp a paren

数据结构练习题---括号匹配

描述 给定一字符串,判断字符串中的括号是否匹配,这里括号分为大括号{}.中括号[],圆括号()三种类型.每行字符串最大不超过1000个. 输入 输入数据分多组,第一行输入数据的组数n,接下来的n行,每行为需要判断的字符串. 输出 输出匹配情况: (1)如果字符串中的应匹配的左括号和右括号不是同一类型,输出wrong (2)如果不是(1)的情况,假如只存在一个右括号没有应匹配的左括号,输出miss left (3)如果不是(1)的情况,假如只存在一个左括号没有应匹配的右括号,输出miss righ

数据结构(C语言) 栈的应用之括号匹配

#include<stdio.h> #include<stdlib.h> typedef struct SqStack { char str[100]; int top; }SqStack; void Push(SqStack* S, char c) { S->top++; S->str[S->top] = c; } void Pop(SqStack* S, char* c) { *c = S->str[S->top]; S->top--; }

C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表 运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构造一个空栈 2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0 3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈 4).Pop(&s,&x) 在栈s 中删除顶元并将其值保存在x单元中返回,简称将x出栈 5)Gettop(s,&x)  读s栈中的

数据结构笔记之——括号匹配(栈的应用之一)(SDOJ 2134)

//  度过了上周的悲催状态,我决定好好学习了-- //书上括号匹配是栈的简单应用,正好在SDOJ上看到这道题,顺便做了下 题目地址:SDOJ 2134 数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出

数据结构实验之栈四:括号匹配(栈)

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出"yes",不匹配输出"no" 示例输入 sin(20+10) {[}] 示例输出 yes no 提示 来源 ma6174