博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构上机3栈-括号匹配
阅读量:7130 次
发布时间:2019-06-28

本文共 2706 字,大约阅读时间需要 9 分钟。

#include 
#include
#define OK 1#define OVERFLOW -1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType;typedef int Status;typedef struct{ SElemType * base; SElemType * top; int stacksize;}SqStack;///初始化栈Status InitStack_Sq(SqStack * S){ S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S) exit(OVERFLOW); S->top = S->base; S->stacksize = STACK_INIT_SIZE; return OK;}///栈是否为空Status EmptyStack(SqStack * S){ if(S->top == S->base) return OK;}///栈置空Status ClearStack(SqStack * S){ S->top = S->base; return OK;}///压栈Status Push(SqStack * S, SElemType e){ if(S->top - S->base >= S->stacksize){ S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->top + S->stacksize; S->stacksize += STACKINCREMENT; } *S->top++ = e; return OK;}///出栈Status Pop(SqStack *S, SElemType * e){ if(S->top == S->base) return ERROR; *e = * --S->top; return OK;}/************************************************************ * 匹配括号()[] * * 1. 初始化栈->栈是否为空(不是空栈则置空) * * 2. 遍历字符串 * * a.([压栈 b.)]匹配栈顶出栈 c.不匹配为多余 d.其他字符跳过 * * 3.匹配结束 输出栈中内容 * * * ************************************************************/void brackets(char * ch){ SqStack S; SElemType e, *p; int i = 0, j=1; if(!InitStack_Sq(&S)) puts("初始化失败\n"); if(EmptyStack(&S)) printf("\n匹配前:\n 栈为空\n"); else ClearStack(&S); printf("\n开始匹配:\n"); while(ch[i]){ if(ch[i]== '[' || ch[i] == '('){ Push(&S, ch[i++]); continue; } p = S.top-1; if(EmptyStack(&S)!=OK) if(*p == ch[i]-2 || *p == ch[i]-1){ Pop(&S, &e); printf("%3d 第%3d个字符 %c 与栈顶 %c 匹配\n", j++, ++i, ch[i], e); continue; } if(ch[i] == ']' || ch[i] == ')'){ printf("%3d 第%3d个字符 %c 无匹配值\n", j++, ++i, ch[i]); continue; } i++; } p = S.top; if(EmptyStack(&S)!=OK){ printf("\n匹配后:\n 栈中还剩下:\n"); while (p--!=S.base) printf("%c ", *p); } else printf("\n匹配后:\n 栈为空,匹配成功");}int main(void){ char ch[50]; puts("请输入字符串: "); gets(ch); brackets(ch); printf("\n"); return 0;}

 

转载于:https://www.cnblogs.com/startnow/p/5052596.html

你可能感兴趣的文章
PHP json_encode() 函数介绍
查看>>
武汉科技大学ACM :1009: 华科版C语言程序设计教程(第二版)习题6.11
查看>>
判断是否为时间格式
查看>>
电影池子,
查看>>
OVN QoS
查看>>
Browser Window
查看>>
p2944 [USACO09MAR]地震损失2Earthquake Damage 2
查看>>
变量类型 c
查看>>
转:SublimeText2 快捷键一览表
查看>>
Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什么样的场景
查看>>
CSS 外边距 margin
查看>>
机器学习排序算法:RankNet to LambdaRank to LambdaMART
查看>>
【LeetCode每天一题】Spiral Matrix II(螺旋数组II)
查看>>
JQuery手写一个简单的轮播图
查看>>
Flex获取屏幕的高度和宽度,浏览器窗口大小
查看>>
CodeForces 937D Sleepy Game
查看>>
杭电多校第二场 1005 hack it
查看>>
python MultiProcessing标准库使用Queue通信的注意要点
查看>>
JAVA入门之基础语言
查看>>
NSLayoutAttribute
查看>>