栈的典型实例问题——括号匹配

 1 //每一个右括号将与最近遇到的那个未匹配的左括号相匹配!!!
 2 #include<iostream>
 3 #include<stack>
 4 #include<string.h>
 5 using namespace std;
 6 const int maxLength=100;//最大字符串长度
 7 void PrintMatchedPairs(char*expression){
 8     stack<int> s;
 9     int length=strlen(expression);
10     int j;
11     for(int i=0;i<length;i++){
12         if(expression[i]==‘(‘) s.push(i);//位置进栈
13         else if(expression[i]==‘)‘){//右括号
14             if(!s.empty()){//栈不空
15                 j=s.top();//记录匹配的左括号位置
16                 cout<<"左括号即第"<<j+1<<"个字符与右括号即第"<<i+1<<"个字符匹配成功"<<endl;
17                 s.pop();//匹配成功,出栈
18             }
19             else cout<<"没有与右括号即第"<<i+1<<"个字符匹配的左括号"<<endl;
20         }
21     }
22     while(!s.empty()){
23         j=s.top();
24         s.pop();
25         cout<<"没有与左括号即第"<<j+1<<"个符号相匹配的右括号"<<endl;
26     }
27 }
28 int main(){
29     char a[10];
30     for(int i=0;i<10;i++) cin>>a[i];
31     PrintMatchedPairs(a);
32     return 0;
33 }

原文地址:https://www.cnblogs.com/TYXmax/p/10987761.html

时间: 2024-08-12 01:12:36

栈的典型实例问题——括号匹配的相关文章

顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)

#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKLINCREMENT 10

栈的典型实例问题——后缀表达式(逆波兰记号)的计算

//编译程序一般使用后缀表达式求解表达式的值(RPN或者逆波兰记号)//计算后缀表达式的过程为:扫描,如果该项是操作数,压栈:如果是操作符,则从栈中退出两个操作数(先退出的是右操作//数),进行运算,并将运算结果重新压入栈中,扫描完后栈顶存放的就是计算结果.//注意的地方:是否支持2位以上的操作数!//操作数之间也肯定是有分割符的: //比如:12 34 56 * + //如果是123456*+,不管是人还是计算机,都是没法做的: 1 #include<iostream> 2 #include

数据结构 栈的实例应用,括号匹配

引用栈的顺序存储,实现括号匹配问题查找: 头文件: #pragma once #include<string.h> #include<stdlib.h> #define MAX 1024 //顺序栈 struct SeqStack{ void *data[MAX]; int size; }; #ifdef __cplusplus extern "C"{ #endif //初始化栈 void *Init_SeqStack(); //入栈 void Push_Seq

栈&amp;&amp;括号匹配

利用栈的结构性质实现括号匹配 (今天被自己玩死了,'='&&'=='小问题坑死人不偿命) 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 stru

括号匹配的检验

#include<iostream> #include<string.h> #include<stack> using namespace std; //判断括号是否能匹配,如果最后栈为空,则括号匹配,否则括号不匹配: int main(){ char ch; stack<char> s; int n; cin>>n; while(n--){ cin>>ch; if(s.empty()||ch=='['||ch=='('){ s.pu

栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配.括号可以延伸到任何成对出现的界定符,例如引号,书名号等. 接下来给出程序实现: 第一部分给出的是堆栈的插入,删除等操作对应的实现: 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

算法学习 - 括号匹配(栈实现)C++

括号匹配是栈最典型的应用了. 其实思路很简单,就是遇到一个左括号就压栈,遇到一个右括号就弹栈,看是否匹配就好了.最后检查下栈里是不是有剩余的括号就行了. 上代码~: // // main.cpp // bracketMatch // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define ElementType char usi

数据结构实验之栈四:括号匹配(栈)

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

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

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