ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ZJNU 数据结构1002 实验二 括号匹配判断算法 栈的运用

2021-05-31 20:02:42  阅读:378  来源: 互联网

标签:top 栈顶 st 括号 ST 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;
}

新手上路,有错请指正

标签:top,栈顶,st,括号,ST,ZJNU,数据结构,1002,指针
来源: https://blog.csdn.net/qq_33884853/article/details/117427111

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有