栈&&括号匹配

利用栈的结构性质实现括号匹配

(今天被自己玩死了,‘=‘&&‘==‘小问题坑死人不偿命)

Matbr.h

#ifndef _MATCH_H_
#define _MATCH_H_

#include<iostream>
#include<string.h>
#include<assert.h>
using namespace std;

typedef char ElemType;
#define STACK_MAX_SIZE 100

typedef struct Stack
{
	ElemType *base;
	int top;
	int stacksize;
	int capacity;
}Stack;

void InitStack(Stack *stack);
bool isfull(Stack *stack);
bool isempty(Stack *stack);
bool push(Stack *stack,ElemType x);
bool pop(Stack *stack);
ElemType GetTop(Stack *stack);

#endif //_MATCH_H_

Matbr.cpp

#include"Matbr.h"

void InitStack(Stack *stack)
{
	stack->base = (ElemType *)malloc(sizeof(ElemType)*STACK_MAX_SIZE);
	assert(stack->base != NULL);
	stack->top = 0;
	stack->capacity = STACK_MAX_SIZE;
	stack->stacksize = 0;
}

bool isfull(Stack *stack)
{
	return stack->stacksize == stack->capacity;
}

bool isempty(Stack *stack)
{
	return stack->stacksize == 0;
}

bool push(Stack *stack,ElemType x)
{
	if(isfull(stack))
		return false;

	stack->base[stack->top++] = x;
	stack->stacksize++;
	return true;
}

bool pop(Stack *stack)
{
	if(isempty(stack))
		return false;
	stack->base[stack->top--];
	stack->stacksize--;
	return true;
}

ElemType GetTop(Stack *stack)
{
	if(isempty(stack))
	{
		cout<<"栈空!"<<endl;
	}
	return stack->base[stack->top-1];
}

man.cpp

#include"Matbr.h"

void main (void)
{
	Stack st;
	char str[2015];
	InitStack(&st);
	cin>>str;
	int len = strlen(str);
	int i = 0;
	int flag = 1;
	while(i<len)
	{
		if(str[i] == '(' || str[i] == '{' ||str[i] == '[')
			push(&st,str[i]);
		else if(str[i] == ')')
		{
			if(isempty(&st) || GetTop(&st) != '(' )
				flag = 0;
			else
				pop(&st);
		}
		else if(str[i] == ']')
		{
			if(isempty(&st) || GetTop(&st) != '[' )
				flag = 0;
			else
				pop(&st);
		}
		else if(str[i] == '}')
		{
			if(isempty(&st) || GetTop(&st) != '{' )
				flag = 0;
			else
				pop(&st);
		}
		i++;
	}
	if(!isempty(&st))
	{
		flag = 0;
	}
	if(flag == 1)
		cout<<"Matching brackets(匹配)"<<endl;//匹配
	else
	{
		cout<<"The brackets do not match(不匹配)"<<endl;//不匹配
	}
}

时间: 2024-10-05 08:23:01

栈&&括号匹配的相关文章

数据结构上机3栈-括号匹配

#include <stdio.h> #include <malloc.h> #define OK 1 #define OVERFLOW -1 #define ERROR 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char SElemType; typedef int Status; typedef struct{ SElemType * base; SElemType * top; int st

栈——括号匹配

Scaena Felix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 492    Accepted Submission(s): 214 Problem Description Given a parentheses sequence consist of '(' and ')', a modify can filp a paren

C语言实现 数据结构-栈-括号匹配

题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”:否则返回“NO”.假设表达式长度小于255,左圆括号少于20个. 输入 一行字符串 输出 YES或者NO 样例输入 ((1+b)-(a+3))*[email protected] 样例输出 YES 样例输入 (25+x)*(a*(a+b+b)@ 样例输出 NO 算法实现:1.利用栈来实现只需要考虑输入的是

括号匹配问题(顺序栈实现)

本周老师作业留了两个.先上传一个吧.那个有时间我再传上来~ 本周的要求: 1.给出顺序栈的存储结构定义. 2.完成顺序栈的基本操作函数. 1)      初始化顺序栈 2)      实现入栈和出栈操作 3)      实现取栈顶元素和判空操作 括号匹配问题 3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果. 4.程序调试运行并保存输出结果. 5.整理并提交实验作业. 1 #include <cstdio> 2 #include <cstring>

栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配.括号可以延伸到任何成对出现的界定符,例如引号,书名号等. 接下来给出程序实现: 第一部分给出的是堆栈的插入,删除等操作对应的实现: 1 public class StackChar 2 { 3 private int maxSize;//堆栈数组大小 4 private char [] stackArray; 5 private int top;//堆栈顶 6 public StackChar(int maxSize) 7 { 8 thi

栈的两个应用:括号匹配的检验和表达式求值

1.     括号匹配的检验 假设表达式中含有3种括号:(),[],{},其嵌套的顺序随意.检验括号是否匹配. 基本思想:在算法中设置一个栈,每读入一个括号,若是右括号,则或者与栈顶匹配的左括号相互消解,或者是不合法的情况:若是左括号,则直接压入栈中.若括号匹配,在算法的开始和结束时,栈都应该是空的. 代码: /* * 判断表达式中的括号是否匹配,匹配输出Yes,否则输出No * {(zhang)+[lei]+{lei}={zhangleilei}} -> Yes * {(zhang)+[lei

括号匹配为题(栈的思想)哈

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出“yes”,不匹配输出“no” 示例输入 sin(20+10) {[}] 示例输出 yes no 提示 我的分析:运用栈的思想,读到左边的括号,就把它推进

数据结构复习_栈和队列,应用_括号匹配&amp;文件目录递归拷贝,

1.主题 2.学习视频和资料 视频    http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=701019&courseId=555010 http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=702024&courseId=555010 3.实现 数组或列表实现 4.应

C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表 运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构造一个空栈 2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0 3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈 4).Pop(&s,&x) 在栈s 中删除顶元并将其值保存在x单元中返回,简称将x出栈 5)Gettop(s,&x)  读s栈中的