第六周项目三 数据结构实践——括号的匹配(栈)
2015-10-08 18:44
387 查看
/* * Copyright (c) 2015, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称: listack.cpp,main.cpp,listack.h * 作者:巩凯强 * 完成日期:2015年10月8日 * 版本号:codeblocks * * 问题描述:假设表达式中允许三种括号:圆括号、方括号和大括号。编写一个算法,判断表达式中的各种左括号是否与右括号匹配 * 输入描述:输入一个式子 * 程序输出:是否匹配 */ #ifndef SQSTACK_H_INCLUDED #define SQSTACK_H_INCLUDED #include <stdio.h> #include <malloc.h> #define MaxSize 100 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; //栈指针 } SqStack; //顺序栈类型定义 void InitStack(SqStack *&s); //初始化栈 bool StackEmpty(SqStack *s); //栈是否为空 bool Push(SqStack *&s,ElemType e); //入栈 bool Pop(SqStack *&s,ElemType &e); //出栈 #endif // SQSTACK_H_INCLUDED
#include"sqstack.h" void InitStack(SqStack *&s) { s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } bool StackEmpty(SqStack *s) { return(s->top==-1); } bool Push(SqStack *&s,ElemType e) { if (s->top==MaxSize-1) //栈满的情况,即栈上溢出 return false; s->top++; s->data[s->top]=e; return true; } bool Pop(SqStack *&s,ElemType &e) { if (s->top==-1) //栈为空的情况,即栈下溢出 return false; e=s->data[s->top]; s->top--; return true; }
#include"sqstack.h" int main() { char c; char st[50]; int d=1, i; SqStack *s; InitStack(s); printf("请输入表达式:"); scanf("%s", st); for(i=0; st[i]!='\0'&&d; i++) { switch(st[i]) { case'(': case'[': case'{': Push(s, st[i]); break; case')': Pop(s, c); if(c!='(') d=0; break; case']': Pop(s, c); if(c!='[') d=0; break; case'}': Pop(s,c); if(c!='{') d=0; break; } } if(StackEmpty(s)&&d==1) printf("配对正确!!\n"); else printf("配对错误!!\n"); return 0; }
运行结果:
知识点总结:
应用顺序栈的算法对括号是否匹配作出判断,巩固了顺序栈的知识。
学习心得:
我真心的感觉越来越难学了,有些真的很难理解。
相关文章推荐
- python数据结构学习笔记-1
- java系统学习(十四) --------常用数据结构
- java系统学习(十四) --------常用数据结构
- 数据结构之动态单链表代码实现
- 数据结构笔记#队列
- Linux内核工程导论——数据结构:其他
- 高级数据结构
- 数据结构------归并排序大彻大悟啊!!
- All in All(模拟)
- Who's in the Middle
- Eqs(sort+二分)
- 数据结构
- KMP算法
- 数据结构和算法学习(6)-递归
- 数据结构之Treap
- 数据结构之线段树
- 数据结构之后缀数组
- HDU 1166 敌兵布阵 (线段树单点更新+区间查询入门)
- 数据结构_链表
- 排序算法之插入排序