ZJNU 数据结构1002 实验二 括号匹配判断算法 栈的运用
2021/5/31 20:21:03
本文主要是介绍ZJNU 数据结构1002 实验二 括号匹配判断算法 栈的运用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Description
假设在表达式中([]())或[([ ][ ])]等为正确的格式,[( ])或([( ))或 (( )])均为不正确的格式。基于栈设计一个判断括号是否正确匹配的算法。
Input
输入数据有多组,每组测试数据一行,一个字符串(长度小于1000),只包含 ‘[‘ ,’]’ ,’(‘ ,‘)’ 。
Output
对于每组测试数据,若括号匹配输出yes,否则输出 no。
Sample Input
[]()[]
([[]])[)
Sample Output
yes
no
嘿嘿,本题没有使用栈的头文件,一切函数都是需要自己定义的
代码区:
#include <cstdio> #include <cstdlib> #include <string.h> #include <iostream> using namespace std; typedef struct stack //定义一个结构体为栈(注意,本题没有使用栈的头文件,一切函数都是自己定义的) { char ch[1000];//存放括号 int top;//栈顶指针(所指的那位置是空的,是栈顶元素的上面) int base;//栈底指针(指向栈底元素的下面) }*ST,Stack;//前者为栈指针,后者为栈结构体 ST InitStack()//创建一个栈 { ST st; st=(ST)malloc(sizeof(Stack));//开辟空间 st->top=0;//将栈顶指针和栈底指针初始化 st->base=0; return st;//返回栈的地址 } int Pop(ST st)//弹出函数,作用是将栈顶元素弹出 { st->top--;//先让指针向下获得栈顶元素的地址 return st->ch[st->top];//返回栈顶元素 } void Push(ST st,char c)//推入函数,作用是将元素推入栈顶 { st->ch[st->top]=c;//推入栈顶 st->top++;//栈顶指针++ } void check(ST st,string a)//判断函数 { int i,t; Push(st,a[0]);//将空白元素推入栈,是因为需要使栈底指针指向空,从下标1开始 for (i=1;i<a.size();i++)//a.size()是指a字符串的长度 { if ((a[i]==']'&&st->ch[st->top-1]=='[')||(a[i]==')'&&st->ch[st->top-1]=='(')) //依次对比字符串中的括号,如果和栈顶的括号匹配的话说明这个括号可以抵消了 //须知,因为栈的性质是先入后出,所以字符串从前往后,栈从后往前,完美! t=Pop(st);//所以需要弹出栈 else Push(st,a[i]);//如果该字符串元素不能完成括号匹配,就先暂时压入栈中(地牢)等待另一半括号来救 } if(st->top==0)//当栈顶指针指向0说明栈中已经没有元素了,也就表面括号已经全部匹配成功了 cout << "yes" << endl; else//反之没有匹配成功 cout << "no" << endl; } int main() { string s;//定义字符串 while(cin >> s)//多组测试数据 { ST st; st=InitStack();//调用函数 check(st,s);//调用函数 } return 0; }
新手上路,有错请指正
这篇关于ZJNU 数据结构1002 实验二 括号匹配判断算法 栈的运用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现