数据结构之---C语言实现括号匹配(栈实现)
2015-09-13 20:50
696 查看
#include <stdio.h> #include <stdlib.h> #define STACKINCREAMENT 10 #define STACK_INIT_SIZE 100 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef int status; typedef char SElemtype; typedef struct { SElemtype *base; SElemtype *top; status stacksize; }sqstack; //初始化栈 status Init(sqstack *s) { s->base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype)); if(!s->base) exit(OVERFLOW); s->top = s->base; s->stacksize = STACK_INIT_SIZE ; return OK; } //获取栈顶元素 status Gettop(sqstack *s, SElemtype e) { if(s->top == s->base) return ERROR; 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, (s->stacksize + STACKINCREAMENT) * sizeof(SElemtype)); if(!s->base) exit(OVERFLOW); s->top = s->base + s->stacksize; s->stacksize += STACKINCREAMENT; } *s->top++ = e; return OK; } //出栈 status pop(sqstack *s, SElemtype *e) { if(s->top == s->base) return ERROR; *e=*--s->top; return OK; } //判断是否为空栈 status stackempty(sqstack *s) { if(s->top==s->base) return OK; return ERROR; } //清空栈 status clearstack(sqstack *s) { if(s->top == s->base) return ERROR; s->top = s->base; return OK; } //括号匹配算法 status Parenthesis_match(sqstack *s,char *str) { int i=0, flag=0; SElemtype e; while(str[i] != '\0') { switch(str[i]) { case '(': push(s,str[i]); break; case '[': push(s,str[i]); break; case ')': { pop(s,&e); if(e != '(') flag=1; } break; case ']': { pop(s,&e); if(e!='[') flag=1; } break; default: break; } if(flag) break; i++; } if(!flag && stackempty(s)) printf("括号匹配成功!\n"); else printf("括号匹配失败!\n"); return OK; } int main() { char str[100], enter; sqstack s; Init(&s); printf("请输入字符串:\n"); scanf("%s",str); scanf("%c",&enter); Parenthesis_match(&s,str); return 0; }
相关文章推荐
- 数据结构——二叉树
- 数据结构—Java版链表相交问题的终极解决方案
- 数据结构学习2--线性表的设计与实现(一)
- 数据结构学习1--基础知识
- 数据结构—判断两个链表是否相交,寻找两个链表的相交节点
- 从map到堆栈
- USB设备信息各数据结构的组织关系
- 数据结构—Java语言判断单链表是否有环与寻找结环节点
- 数据结构
- [软考]数据结构导论
- OpenCV学习笔记(一)——OpenCV数据结构Mat详解
- 数据结构 B树、B-树、B+树、B*概念
- 数据结构顺序表删除所有特定元素x
- 数据结构-顺序表插入元素时扩容问题
- Codeforces Beta Round #17 E. Palisection(回文树)
- 数据结构-链表实现删除全部特定元素x
- 数据结构-链表逆置(c++模板类实现)
- 线性表的应用,计算任意两个表简单自然连接过程讨论线性表的应用(参考数据结构教程 李春葆)
- 陈越、何钦铭《数据结构》第二讲线性结构 笔记
- 【软考视频基础知识】——数据结构