数据结构-C语言 栈的简单应用——括号匹配
来源:互联网 发布:mac的桌面壁纸 编辑:程序博客网 时间:2024/05/21 22:28
题目很简单:假设表达式中允许包含三中括号:( ),[ ],{ },其嵌套顺序任意,如{ [ ( [ ] [ ] ) ] },为正确的格式,[ ( ] )为不正确的格式。
将输入的括号字符进行判断:若输入为左括号则压入栈,若为右括号则与栈顶的左括号进行配对。
若配对成功,则将栈顶的左括号弹出,继续下一次判断。
若配对不成功,则栈无法弹空。
当输入完成后,可能有多余的右括号,此时设置一个辅助变量sts=1,当栈空且输入为右括号时,sts=0,并提示配对失败;
程序最后判断,若栈空且sts=1则所有括号配对成功,若栈不空则配对失败。
以下是代码实现:
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef char SElement;typedef struct SqStack//定义栈{ SElement *base; SElement *top; int stacksize;}SqStack;Status InitStack(SqStack *s)//初始化栈{ s->base=(SElement*)malloc(STACK_INIT_SIZE*sizeof(SElement)); if (!s->base) return 0; s->top=s->base; s->stacksize=STACK_INIT_SIZE; return 1;}Status Push(SqStack *s, SElement e)//入栈{ if (s->top-s->base>=s->stacksize) { s->base=(SElement*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElement)); if (!s->base) return 0; s->top=s->base+s->stacksize; s->stacksize+=STACKINCREMENT; } *s->top++=e; return 1;}Status Pop(SqStack *s, SElement *e)//出栈{ if (s->top==s->base) return 0; *e=*--s->top; return 1;} Status GetTop(SqStack S,SElement *e)//获取栈顶元素 { if(S.top>S.base) { *e=*(S.top-1); return 1; } else return 0; }Status StackEmpty(SqStack *s)//栈空{ if (s->base==s->top) return 1; return 0;}void Check()//匹配函数{ Status sts=1;//1则匹配,0则不匹配 SqStack S; SElement tin, ttop, e;//temp作输入的小房间,ttop作为栈顶元素,e作为垃圾箱 InitStack(&S); scanf("%c",&tin); while (tin!='\n') { //如果输入为左括号就将其压入栈中 if (tin=='('||tin=='['||tin=='{') Push(&S, tin); //再次输入 scanf("%c",&tin); if ((tin==')'||tin==']'||tin=='}')&&StackEmpty(&S)==1)//如果栈空且再次输入为右括号则不匹配,sts=0 { sts=0; printf("ERROR\n"); break; } //获取栈顶元素 GetTop(S, &ttop); //如果栈顶元素与再次输入的元素匹配就把栈顶元素弹出 if (ttop=='('&&tin==')') Pop(&S, &e); else if (ttop=='['&&tin==']') Pop(&S,&e); else if (ttop=='{'&&tin=='}') Pop(&S,&e); } if (StackEmpty(&S)&&sts==1)//栈空且匹配 printf("OK\n"); else if(!StackEmpty(&S))//栈不空不匹配 printf("ERROR\n");}int main()//主程序{ Check(); printf("******************************Programmed by DXH924*****************************");}
阅读全文
0 0
- 数据结构-C语言 栈的简单应用——括号匹配
- C语言数据结构-桟——括号的匹配检验
- 数据结构(C语言)读书笔记6:栈的应用之括号匹配的C代码实现
- 数据结构题典021:栈的应用——括号匹配的检验(C++)
- 括号的匹配(c语言数据结构)
- 【数据结构】栈的应用——检测括号是否匹配
- 【数据结构】栈的应用--括号的匹配(c++)
- 栈的应用——括号匹配的检验(C语言)
- 数据结构(C语言)---括号匹配
- 括号匹配问题 栈的应用 C语言实现
- c语言:括号匹配检测(栈的应用)
- c语言栈的应用之括号匹配问题
- 数据结构栈的应用之括号匹配
- 数据结构之 栈的应用 括号匹配
- 数据结构 栈的应用 括号匹配
- 【数据结构】栈的应用 括号匹配
- 栈的应用-括号匹配-数据结构
- 数据结构栈应用括号匹配
- 005_LeetCode_5 Longest Palindromic Substring 题解
- day08-WorkAndStudy
- Python之缩进错误
- Java消息中间件学习笔记七 -- Spring中使用JMS
- cglib动态代理[基于类操作的动态代理实现]
- 数据结构-C语言 栈的简单应用——括号匹配
- 简图记录-linux内核同步基础
- 前后台分离开发 后台进行跨域设置
- 特斯拉首次正面回应在华建厂事宜!别高兴太早,独资建厂的特斯拉给不了你白菜价
- Spark Streaming与Flume集成小测试:PUSH的方式
- hash原理的理解
- 坚持一记----深度探索c++模型初读
- HashMap的工作原理
- 树莓派初级教程