栈的应用--括号匹配的检验

算法中设置一个栈,每次读入一个括号,若是右括号,则或者与置于栈顶的括号匹配,或者是不合法的情况,若是左括号,则入栈。若算法结束,栈是空的,则括号合法。
括号匹配函数

Status bracket_match(){SElemType brackets[100];int i;SElemType e;SqStack S;Init_Stack(S);scanf("%s",brackets);while(brackets[i]!='\0'){if(i==0&&(brackets[i]=='}'||brackets[i]==']'||brackets[i]==')'))return ERROR;else{switch(brackets[i]){case '}':Get_Top(S,e);if(e=='{')Pop(S,e);break;case ']':Get_Top(S,e);if(e=='[')Pop(S,e);break;case ')':Get_Top(S,e);if(e=='(')Pop(S,e);break; default:Push(S,brackets[i]);break;}}i++;}if(Stack_Empty(S)){Destroy_Stack(S);return OK;}else{Destroy_Stack(S);return ERROR;}
}

全部表示和实现,以及测试代码

#include<stdio.h>
#include<stdlib.h>#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0typedef int Status;
typedef char SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;
}SqStack;Status Init_Stack(SqStack &S){S.base=(SElemType*)malloc(sizeof(SElemType)*STACK_INIT_SIZE);if(!S.base){printf("Merry Error\n");exit(0);}S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;
}Status Clear_Stack(SqStack &S){S.top=S.base;return OK;
}Status Stack_Empty(SqStack S){if(S.top==S.base){return TRUE;}else{return FALSE;}
}int Stack_Length(SqStack S){int length=0;while(S.base!=S.top){S.top--;length++;}return length;
} Status Get_Top(SqStack S,SElemType &e){if(S.base==S.top){return ERROR;}else{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,sizeof(SElemType)*(S.stacksize+STACKINCREMENT));if(!S.base){printf("Merroy Error!\n");exit(0);}}S.stacksize+=STACKINCREMENT;*S.top++=e;return OK;
}Status Pop(SqStack &S,SElemType &e){if(S.base==S.top){return ERROR;}e=*(--S.top);return OK;
}Status Destroy_Stack(SqStack &S){S.top=S.base;free(S.base);return OK;
}Status bracket_match(){SElemType brackets[100];int i;SElemType e;SqStack S;Init_Stack(S);scanf("%s",brackets);while(brackets[i]!='\0'){if(i==0&&(brackets[i]=='}'||brackets[i]==']'||brackets[i]==')'))return ERROR;else{switch(brackets[i]){case '}':Get_Top(S,e);if(e=='{')Pop(S,e);break;case ']':Get_Top(S,e);if(e=='[')Pop(S,e);break;case ')':Get_Top(S,e);if(e=='(')Pop(S,e);break; default:Push(S,brackets[i]);break;}}i++;}if(Stack_Empty(S)){Destroy_Stack(S);return OK;}else{Destroy_Stack(S);return ERROR;}}int main(){while(1){if(bracket_match())printf("Brackets Is OK!\n");else{printf("Wrong Brackets\n");}}return 0;
} 

这里写图片描述
欢迎留言交流。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js 初体验

node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为《Nodejs初阶之express》 ~ 2014/09/24 更新《Express 4.X 启航指南》 欢迎阅读和评论:) 最近写的文章收到许多朋友的反馈&#xff0c;感谢大家的支持和建议&#…

Qt之模型/视图(实时更新数据)

上两节简单介绍了Qt中对于模型/视图的编程&#xff0c;大部分助手里说的很清楚了&#xff0c;现在就开始实战部分吧&#xff01; 在实际应用中&#xff0c;视图展示的数据往往并非一成不变的&#xff0c;那么如何实时更新成了一个很重要的问题&#xff01;功能&#xff1a;&am…

android 动态生成fragment,Android动态加载fragment(fragment复用)

【实例简介】Android动态加载fragment(fragment复用)【实例截图】【核心代码】fm_reuse└── fm_reuse├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── classes│ │ └── com│ │ └── example│ │ └── fm_reuse│ …

Linux内核3.0移植并基于Initramfs根文件系统启动

Linux内核移植与启动 Target borad&#xff1a;FL2440 Bootloader&#xff1a;U-boot-2010.09 交叉编译器&#xff1a;buildroot-2012.08 1.linux内核基础知识 首先&#xff0c;磨刀不误砍柴工。在动手进行linux内核移植之前&#xff0c;我们有必要对linux内核进行一定的了解。…

操作系统上机作业--实现shell(2)(多进程)

sh2.c: 实现shell程序&#xff0c;要求在第1版的基础上&#xff0c;添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路&#xff1a; 和sh1.c相比&#xff0c;主要是修改了cmd函数的实现过程。通过循环找出重定向符号"&g…

当泛型方法推断,扩展方法遇到泛型类型in/out时。。。

说到泛型方法&#xff0c;这个是.net 2.0的时候引入的一个重要功能&#xff0c;c#2.0也对此作了非常好的支持&#xff0c;可以不需要显试的声明泛型类型&#xff0c;让编译器自动推断&#xff0c;例如&#xff1a; 1 void F<T>(T value){} 2 //... 3 int i 0; 4 F(i); 此…

AOP相关

实现AOP的技术&#xff0c;主要分为两大类&#xff1a;一是采用动态代理技术&#xff0c;利用截取消息的方式&#xff0c;对该消息进行装饰&#xff0c;以取代原有对象行为的执行&#xff1b;二是采用静态织入的方式&#xff0c;引入特定的语法创建“方面”&#xff0c;从而使得…

操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)

pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 1/5 - 1/7 1/9 - ... PI/4 • 主线程创建1个辅助线程 • 主线程计算级数的前半部分 • 辅助线程计算级数的后半部分 • 主线程等待辅助线程运行結束后,将前半部分和后半部分相加实现思路&#xff1…

四种途径将HTML5 web应用变成android应用

作为下一代的网页语言&#xff0c;HTML5拥有很多让人期待已久的新特性。HTML5的优势之一在于能够实现跨平台游戏编码移植&#xff0c;现在已经有很多公司在移动设备上使用HTML5技术。随着HTML5跨平台支持的不断增强和智能手机的迅速普&#xff0c;HTML5技术有着非常好的发展前景…

操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)

pi2.c: 使用N个线程根据莱布尼兹级数计算PI • 与上一题类似&#xff0c;但本题更加通用化&#xff0c;能适应N个核心&#xff0c;需要使用线程参数来实现 • 主线程创建N个辅助线程 • 每个辅助线程计算一部分任务&#xff0c;并将结果返回 • 主线程等待N个辅助线程…

html 16进制 转换成字符串,js 字符串和16进制的互相转换

字符串转16进制function strToHexCharCode(str) {if(str "")return "";var hexCharCode [];hexCharCode.push("0x");for(var i 0; i < str.length; i) {hexCharCode.push((str.charCodeAt(i)).toString(16));}return hexCharCode.join(&qu…

数组以及冒泡排序

数组 1、概念&#xff1a;可以帮我一次声明多个同类型的变量&#xff0c;这些变量再内存中是连续存储的。 2、声明语法&#xff1a;数据类型[] 数组名 new 数据类型[数组长度] 数组长度&#xff1a;一次要声明的同类型的变量个数。是在定义这个数组的时候就确定了&#xf…

jQuery触发a标签的点击事件无效

1 <a id"workFrame" href"pages/work.html" target"FrameBox">首页</a> 2 3 $("#workFrame").tigger("click"); 上述的代码&#xff0c;其实挺正常的&#xff0c;但是怎么也触发不了a标签的cli…

操作系统上机作业--多线程排序

sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序算法归并数组的前半部分和后半部分 实现思路&#xff1a; ARRAY_CO…

jdk5下载链接

查看jdk版本 java -versionJDK下载 最新版本http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJDK下载 版本1.5.22http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html#jdk-1.5.0_22-oth-JPR JDK…

html的细节优化,网站页面优化细节详解

原标题&#xff1a;网站页面优化细节详解SEO页面优化是继SEO结构优化之后&#xff0c;另一个重要优化地方;页面标题在每个页面中的关键位置&#xff0c;出现目标关键词&#xff0c;这是我们做页面优化的基础思路&#xff0c;关键词位置&#xff0c;都有哪些呢?第一个是关键位置…

突击优化算法!

Matlab语言可以与C/C语言转换或调用。 Matlab语句&#xff1a;load name 把name中文件的所有变量载入到工作空间中。save name 保存工作空间的变量到name.mat中。 cholesky分解把一个正定矩阵分为一个下三角矩阵和它转置矩阵的乘积。 两种创立符号函数的方法&#xff1a;sym函数…

操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)

pc1.c: 使用条件变量解决生产者、计算者、消费者问题 /* • 系统中有3个线程&#xff1a;生产者、计算者、消费者 • 系统中有2个容量为4的缓冲区&#xff1a;buffer1、buffer2 • 生产者生产a、b、c、‘d、e、f、g、h八个字符&#xff0c;放入到buffer1 • 计算者从b…

淘宝代码和html区别,taobao.html

taobao主题市场女装 /男装 /内衣 >鞋靴 /箱包 /配件 >童装玩具 /孕产 /用品 >家电 /数码 /手机 >女装 /男装 /内衣 >鞋靴 /箱包 /配件 >童装玩具 /孕产 /用品 >家电 /数码 /手机 >女装 /男装 /内衣 >鞋靴 /箱包 /配件 >童装玩具 /孕产 /用品 >…

程序各个段text,data,bss,stack,heap

网上找了一堆资料学习一下,了解这些, 有助于规化程序结构,优化代码; 使用gcc编译出来的程序,用size可以查看程序结构和大小, 如 1: #size hello 2: Text data bss dec hex filename 3: 778 200 4 982 3D6 hello 所以一个可执行的程序文件,结构分三部分: .text 代码段,用来存…