【数据结构基础】判别给定的表达式所含括号是否正确配对出现的算法。
2017-04-10 00:30
417 查看
描述:
假设一个算术表达式中可包含三种括号:圆括号()、方括号[]以及花括号{},且这三种括号可以按任意的次序相互嵌套使用。试编写判别给定的表达式所含括号是否正确配对出现的算法。
假设一个算术表达式中可包含三种括号:圆括号()、方括号[]以及花括号{},且这三种括号可以按任意的次序相互嵌套使用。试编写判别给定的表达式所含括号是否正确配对出现的算法。
#include<stdio.h> #include<stdlib.h> #include<string.h> #pragma warning(disable:4996) typedef struct node { char c; struct node *next; }Seqstack,*PSeqstack; typedef struct { PSeqstack top; }Linkstack,*Plinkstack; //初始化空栈 Plinkstack Init_Stack(void){ Plinkstack S; S = (Plinkstack)malloc(sizeof(Linkstack)); if (S) { S->top = NULL; } return S; } //判断栈是否为空 int Is_empty(Plinkstack S) { if (S->top == NULL) { return 0; } else { return 1; } } //入栈 void Push_Stack(Plinkstack S,char c) { PSeqstack p = (PSeqstack)malloc(sizeof(Seqstack)); p->c = c; p->next = S->top; S->top = p; } //出栈 void Pop_Stack(Plinkstack S) { if (!Is_empty(S)) { printf("栈为空,不可以出栈"); } else { S->top = S->top->next; } } //得到栈顶元素 char GetTopStack(Plinkstack S) { return S->top->c; } //打印栈 void Print_Stack(Plinkstack S) { while (S->top) { printf("%c", S->top->c); S->top = S->top->next; } } int main(void) { char s; Plinkstack S; S = Init_Stack(); s = getchar(); if (s == ')' || s == ']' || s == '}') { printf("输入非法"); return 0; } else { while (s!='\n') { if (s == '(' || s == '[' || s == '{') { Push_Stack(S, s); s = getchar(); } else { if(s==')'){ if (GetTopStack(S) == '(') Pop_Stack(S); else Push_Stack(S, s); s = getchar(); } else { if (s == ']') { if (GetTopStack(S) == '[') Pop_Stack(S); else Push_Stack(S, s); s = getchar(); } else { if (s == '}') { if (GetTopStack(S) == '{') Pop_Stack(S); else Push_Stack(S, s); s = getchar(); } } } } } } if (!Is_empty(S)) { printf("输入合法"); } else { printf("输入非法"); } return 0; }
相关文章推荐
- 判别给定表达式中所含括号是否正确配对出现的算法
- 一个判别表达式中开、闭括号是否配对出现的算法
- 设计一个算法判别用字符串表示的表达式中开、闭括号是否配对出现
- 假设表达式中允许包括3中括号:(,[,{,设计一个算法采用顺序栈判断表达式中的括号是否正确配对
- 数据结构复习——链栈的一些操作以及表达式中的括号是否配对问题
- 假设表达式中包含三种括号 圆括号方括号大括号 设计一个算法用顺序栈判断表达式中的括号是否正确配对
- “顺序栈”判断表达式中的括号是否正确配对
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- “链栈”判断表达式中的括号是否正确配对
- 利用顺序栈实现:判别表达式中括弧是否正确配对(BracketMatch函数)
- Java - - 判断表达式中的括号是否正确配对
- 假设一个数学算法中包括圆括号(),方括号[],花括号{}三种类型,编写表达式的括号是否配对
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- 正则表达式基础 多选结构 加不加括号大不同
- .net 数据结构与算法基础:泛型链表使用
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
- 用堆栈实现给定数学表达式括号是否匹配 推荐
- .net 数据结构与算法基础:二叉树
- 算法学习之数据结构之链表是否相交,链表是否存在环