假设表达式中包含两种括号:圆括号和方括号,其嵌套顺序随意,即([]())或[([])]等为正确的格式,[()]或([()]或(())均为不正确的格式。检验括号是否匹配可以用堆栈来实现当遇到 ( 或[ 时进栈,遇到 ] 或 ] 时出栈进行匹配检验,如果出现不匹配的情况立即束,否则继续取下一个字符。如果没有遇到不匹配的情况,最后判断栈是否为空,栈为空,括号匹配,否则不匹配。
源代码:
#define STACKINCREAMENT 10
#define STACK_INIT_SIZE 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int status ;
typedef char SElemtype;
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
typedef struct
{
SElemtype *base;
SElemtype *top;
status stacksize;
}sqstack;
status Init(sqstack *s)
{
s->base=(SElemtype *)malloc(STACK_INIT_SIZE*
sizeof(SElemtype));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE ;
return OK;
}
status Gettop(sqstack *s,SElemtype e)
{
if(s->top==s->base) return ERROR;
e=*(s->top-1);
return OK;
}
status push(sqstack *s,SElemtype e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(SElemtype *)realloc(s->base,
(s->stacksize+
STACKINCREAMENT)*sizeof(SElemtype));
if(!s->base)exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREAMENT;
}
*s->top++=e;
return OK;
}
status pop(sqstack *s,SElemtype *e)
{if(s->top==s->base) return ERROR;
*e=*--s->top;
return OK;
}
status stackempty(sqstack *s)
{if(s->top==s->base)
return OK;
return ERROR;
}
status clearstack(sqstack *s)
{
if(s->top==s->base) return ERROR;
s->top=s->base;
return OK;
}
status Parenthesis_match(sqstack *s,char *str)
{int i=0,flag=0;
SElemtype e;
while(str[i]!='\0')
{
switch(str[i])
{
case '(': push(s,str[i]);break;
case '[': push(s,str[i]);break;
case ')': {pop(s,&e); if(e!='(') flag=1;} break;
case ']': {pop(s,&e); if(e!='[') flag=1;} break;
default:break;
}
if(flag)break;
i++;
}
if(!flag&&stackempty(s))
printf(" Parenthesis is match!\n");
else
printf(" Parenthesis isn't match!\n");
return OK;
}
void main()
{
char str[100],enter;
sqstack s;
Init(&s);
printf("input string chars:");
scanf("%s",str);
scanf("%c",&enter);
Parenthesis_match(&s,str);
getch();
}
分享到:
相关推荐
在C++编程中,括号匹配是一个至关重要的概念,它涉及到程序的正确性与语法合法性。括号匹配通常指的是确保程序中的所有开启括号(如`(`、`[`、`{`)都有对应的关闭括号(`)`、`]`、`}`)。在C++中,括号用于控制代码...
利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。输入一个包含上述括号的...
在编程领域,括号匹配是一项基础且重要的任务,特别是在处理表达式、代码解析或编译器设计时。本文将深入探讨如何使用C语言和数据结构中的循环队列来实现括号匹配的算法。 首先,我们需要了解什么是循环队列。循环...
括号匹配
括号匹配数据结构论文 括号匹配是数据结构中的一种重要概念,主要用于验证表达式中的括号是否匹配正确。在本论文中,我们将讨论括号匹配的算法和实现方法,并提供一个使用C语言实现的可运行程序。 一、题目分析及...
在编程领域,括号匹配是一项基础且重要的任务,它涉及到语法分析和编译原理。本题目以"C++写括号匹配堆栈"为标题,旨在通过实现一个程序来检查输入的字符串或文件中的括号是否正确配对。下面将详细讨论相关知识点。 ...
在数据结构领域,括号匹配是一项基础且重要的问题,它涉及到字符串处理、树形结构以及算法设计。"括号匹配(更加优秀版本)"的主题显然旨在探讨如何以更高效或优化的方式解决这一经典问题。括号匹配通常出现在编译原理...
数据结构——括号匹配 数据结构中的括号匹配是指在编程中检查输入的括号是否正确匹配的过程。这个过程是基于栈的数据结构实现的。 一、栈的概念 栈是一种基本的数据结构,它遵循先入后出的原则,最后入栈的元素...
### 表达式的括号匹配检验问题 #### 一、问题背景及定义 在计算机科学领域,括号匹配是一项常见的编程任务,它涉及到表达式的合法性验证。本问题旨在设计一个程序,该程序能够检查给定表达式中的括号是否正确配对...
在编程领域,数据结构是解决问题的关键工具之一,而括号匹配是数据结构中常见的问题,尤其是在解析表达式或处理代码语法时。C语言作为一种强大的、底层的编程语言,被广泛用于编写这类算法。本程序就是一个基于C语言...
目前的工作需要写大量的、很长的、内含很多括号的表达式,需要一个括号匹配检测工具,于是就自己做了一个,也发上来分享一下。 使用说明: 1.将要检查的表达式复制到“请将要检查的表达式复制到该文件.txt”文件内...
【括号匹配 数据结构 MFC】是一个利用数据结构——栈(Stack)实现的面向对象程序,主要用于检查并解决括号的正确匹配问题。在编程领域,括号匹配是一个常见的问题,尤其是在解析数学表达式、编译器设计或者文本处理...
实验报告的主题是“数据结构C语言版栈的应用单括号匹配”,主要目的是通过实现一个程序来检测输入的字符串中的括号是否匹配。该程序利用栈这一数据结构来解决括号匹配问题,它允许括号的嵌套。实验内容包括定义栈的...
括号匹配java源代码 在文本处理中,括号匹配是非常重要的一种操作。括号匹配java源代码就是实现这种操作的命令行程序。该程序使用栈数据结构来实现括号匹配的检测。 栈(Stack) 栈是一种_last in, first out_...
括号匹配的检验 括号匹配是数据结构中的一种常见问题,通过使用栈这种数据结构可以实现括号的匹配检验。下面我们将详细介绍括号匹配的算法和实现。 栈的定义 在括号匹配算法中,我们使用栈来存储括号。栈是一种...
《简单编译器(括号匹配):C++实现与设计原理》 编译器是计算机科学中的核心组件,它负责将高级语言源代码转换为机器可执行的指令。在这个项目中,我们专注于一个特定的任务——括号匹配,这是编译器在语法分析...
括号匹配算法是程序设计中的基础部分,尤其在解析表达式、编译器和解释器中扮演着至关重要的角色。易语言括号匹配算法源码可以帮助我们理解如何在易语言环境下实现这种算法。 括号匹配问题通常涉及到四种类型的括号...
在计算机科学中,数据结构是组织和管理大量数据的关键组成部分,而括号匹配问题则是数据结构领域中的一个重要问题。括号匹配通常出现在编程语言解析、编译器设计、文本处理和数学表达式计算等场景中。它涉及到如何...
括号匹配问题是一种常见的计算机科学问题,主要涉及数据结构和算法的设计。在编程领域,它经常出现在解析表达式、编译器设计、树结构处理等场景。本问题的核心是检查给定的一组括号(通常是圆括号"()"、方括号"[]"和...
括号匹配是计算机科学中一个基础且重要的概念,特别是在编译原理、解析技术和算法设计中。这个主题主要关注如何正确地验证一个字符串中左括号(如"{", "(", "[")与右括号("}", ")", "]")的配对性。在本篇文章中,...