#include <stdio.h>
#include <malloc.h> //malloc,realloc
#include <math.h> //含有overflow
#include <process.h> //exit()
#define S_SIZE 100 //栈的空间大小
#define STACKINCREAMENT 10//增加空间
struct SqStack{
int *base; //栈底
int *top; //栈顶
int stacksize; //栈当前的存储空间
};
void main()
{//子函数声明
void InitStack(SqStack &S);//初始化空栈
int StackEmpty(SqStack S);//判空
void push(SqStack &S,int e);//进栈
void pop(SqStack &S,int &e);//出栈
//主函数开始
SqStack s;//初始化空栈
InitStack(s);
char ch[],*p;int e;
p=ch;
printf("输一个含义有()[]{}的括号表达式:\n");
gets(ch);
while(*p)
{
switch (*p)
{
case '{':
case '[':
case '(': push(s,*p++);break;//只要是左括号就入栈
case '}':
case ']':
case ')':pop(s,e);
if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')'))
p++;
else
{printf("括号不匹配!");exit(OVERFLOW);}
break;
default :p++;//其他字符就后移
}
}
if (StackEmpty(s))
printf("括号匹配成功");
else
printf("缺少右括号!");
printf("\n");
}
void InitStack(SqStack &S)
{S.base=(int *)malloc(S_SIZE*sizeof(int));
S.stacksize=S_SIZE;
S.top=S.base;//初始化空栈
}
int StackEmpty(SqStack S)
{
if(S.base==S.top)
return ;
else
return ;
}
void push(SqStack &S,int e)
{//进栈
if(S.top-S.base>=S.stacksize)
{S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int));
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREAMENT;}
*(S.top)=e;
S.top++;
}
void pop(SqStack &S,int &e)
{//出栈
if(S.base!=S.top)
{S.top--;
e=*S.top;}
}

检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。

括号匹配算法 C语言实现的更多相关文章

  1. Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现

    接下篇:http://www.cnblogs.com/fuck1/p/5995857.html 堆栈的应用1:括号匹配算法 括号匹配问题 假设算术表达式中包含圆括号,方括号,和花括号三种类型.使用栈数 ...

  2. 数据结构13: 括号匹配算法及C语言实现

    在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” .不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否能够匹配上. 在编写程序时,括号可以嵌套,即: “ ...

  3. php栈数据结构和括号匹配算法

    栈,体现的是后进先出,即LIFO.队列,体现的是先进先出,即FIFO. 栈 array_pop() //尾出 array_push() //尾进 或 array_shift()//头进 array_u ...

  4. 串的匹配算法--C语言实现

    串这种数据结构,使用是比较多的,但是它的一些方法在更高级的语言中,比如Java,Python中封装的比较完整了.在这里,我只写了串中使用最多的匹配算法,即串的定位操作.串的匹配算法常用的两种就是朴素匹 ...

  5. P1739_表达式括号匹配(JAVA语言)

    思路:刚开始想用stack,遇到'('就push,遇到')'就pop,后来发现其实我们只需要用到栈里'('的个数,所以我们用一个变量统计'('的个数就好啦~ 题目描述 假设一个表达式有英文字母(小写) ...

  6. 【转】从Go、Swift语言出发

    Google于2009年第一次提出了Go的构思,Facebook在去年春天引入了Hack,随后不久Apple也发布了其Swift语言. 在战争中,胜利者写历史书:在科技中,赢的公司都在写编程语言.互联 ...

  7. 从Go、Swift出发:语言的选择需谨慎

    本文转自 : http://www.csdn.net/article/2014-12-09/2823025 摘要:无论是开源的Go,还是闭源的Swift,新的语言总是利弊一体.不过可以确定的是,新的语 ...

  8. Shell—各种括号的用法

    括号的种类 小括号,圆括号 ( ) 中括号,方括号 [ ] 大括号.花括号 { } 一.单小括号 () 1.另开命令组——小括号中的命令将会新开启一个子shell独立顺序运行,所以括号中的变量不能够被 ...

  9. 从零开始学C语言

    从零开始学C语言 @阆苑祁寒 更新时间:2019-09-13 写在前面:本文从一个初学者的角度,给出了对C语言的简单理解.如有谬误,敬请指出! Week1——基本语法 #include <std ...

随机推荐

  1. js创建对象的方式 三种

    1. 使用直接量创建1个对象: var aobj = { x : 10, y : function(){ console.log("aobj--> "+this.x); } ...

  2. HDU 1004 - Let the Balloon Rise(map 用法样例)

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  3. git使用前配置

    1. git config --global user.name "Trey" 2. git config --global user.email 164355949@qq.com ...

  4. android anim 动画效果

    动画效果编程基础--AnimationAndroid       动画类型       Android的animation由四种类型组成       XML中    alpha    渐变透明度动画效 ...

  5. 容易上手-类似ERP系统 简单特效

    今天大概简单写一个效果, 这个效果 很容易 上手的: html: <style type="text/css">.menu_list ul{display:none;} ...

  6. ApiGen4.1 windows安装教程

    一. ApiGen4.1版本介绍 1.ApiGen介绍 ApiGen是自动生成PHP项目的阅读文档工具. 用于从PHP源代码创建专业的API文档,类似于phpDocumentor/phpDoc. Ap ...

  7. Python之路第四天,基础(4)-装饰器,迭代器,生成器

    装饰器 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象 ...

  8. POJ 3111 K Best(二分答案)

    [题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...

  9. linear encoder 和 PCA

  10. heap creation

    There two methods to construct a heap from a unordered set of array. If a array has size n, it can b ...