第六周项目3 括号的匹配
2015-11-02 17:00
302 查看
问题与代码
//head.h
//main.cpp
//zdy.cpp
//match.cpp
运行结果
知识点总结
使用链栈,进行了关于括号的匹配的实践。
/* *Copyright (c) 2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:head.h,main.cpp,zdy.cpp,match.cpp *作者:陈梦萍 *完成日期:2015年11月02日 *版本号:v1.0 * *问题描述: 括号的匹配 *输入描述:输入表达式 *程序输出:匹配是否正确 */
//head.h
#include <stdio.h> #include <malloc.h> typedef char ElemType; typedef struct linknode { ElemType data; //数据域 struct linknode *next; //指针域 } LiStack; //链栈类型定义 void InitStack(LiStack *&s); //初始化栈 void DestroyStack(LiStack *&s); //销毁栈 int StackLength(LiStack *s); //返回栈长度 bool StackEmpty(LiStack *s); //判断栈是否为空 void Push(LiStack *&s,ElemType e); //入栈 bool Pop(LiStack *&s,ElemType &e); //出栈 bool GetTop(LiStack *s,ElemType &e); //取栈顶元素 void DispStack(LiStack *s); //输出栈中元素 bool isMatch(char *st);
//main.cpp
#include"head.h" int main() { char st[50]; printf("请输入表达式:"); scanf("%s", st); if(isMatch(st)) printf("配对正确!!\n"); else printf("配对错误!!\n"); return 0; }
//zdy.cpp
#include"head.h" void InitStack(LiStack *&s) { s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; } void DestroyStack(LiStack *&s) { LiStack *p=s->next; while (p!=NULL) { free(s); s=p; p=p->next; } free(s); } int StackLength(LiStack *s) { int i=0; LiStack *p; p=s->next; while (p!=NULL) { i++; p=p->next; } return(i); } bool StackEmpty(LiStack *s) { return(s->next==NULL); } void Push(LiStack *&s,ElemType e) { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; } bool Pop(LiStack *&s,ElemType &e) { LiStack *p; if (s->next==NULL) return false; p=s->next; e=p->data; s->next=p->next; free(p); return true; } bool GetTop(LiStack *s,ElemType &e) { if (s->next==NULL) return false; e=s->next->data; return true; } void DispStack(LiStack *s) { LiStack *p=s->next; while (p!=NULL) { printf("%c ",p->data); p=p->next; } printf("\n"); }
//match.cpp
#include"head.h" bool isMatch(char *st) { int d=1, i; char c; LiStack *s; InitStack(s); 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) return true; else return false; }
运行结果
知识点总结
使用链栈,进行了关于括号的匹配的实践。
相关文章推荐
- 第十周-自建算法库--二叉树的链式存储及基本运算
- *第十周*数据结构实践项目一【二叉树的链式存储算法库】
- java后端推荐书籍
- bower 组件私库建立
- Windows平台分布式架构-负载均衡(高并发)
- 广义表算法库及应用
- 项目二——二叉树遍历的递归思想
- Android 关于轻量级存储PreferencesUtils
- 第七周 项目4-队列数组
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误
- 循环语句
- 第十周项目3-利用二叉树遍历思想解决问题
- ZOJ 2967-C - Colorful Rainbows
- 第十周项目三~~~判断二叉树的相似
- 初探Selenium
- SimpleDataFormat在多线程访问不安全
- Android事件总线纷发库EventBus的使用方法
- 使用Minitab解决Excel的限制问题
- Android Studio进行单元测试