数据结构练习题---括号匹配

描述

给定一字符串,判断字符串中的括号是否匹配,这里括号分为大括号{}、中括号[],圆括号()三种类型。每行字符串最大不超过1000个。

输入

输入数据分多组,第一行输入数据的组数n,接下来的n行,每行为需要判断的字符串。

输出

输出匹配情况:

(1)如果字符串中的应匹配的左括号和右括号不是同一类型,输出wrong

(2)如果不是(1)的情况,假如只存在一个右括号没有应匹配的左括号,输出miss left

(3)如果不是(1)的情况,假如只存在一个左括号没有应匹配的右括号,输出miss right

(4)如果完全匹配,输出match

注意:如果(2)和(3)情况同时出现,输出wrong。

样例输入

3
(123)
{[(234}))
{123

样例输出

match
wrong
miss right

  1 #include<iostream>
  2 #include<stdio.h>
  3 #include<string.h>
  4 using namespace std;
  5 typedef struct node
  6 {
  7     char e;
  8     struct node *next;
  9 }node,*stackk;
 10
 11 void initstack(stackk &top)
 12 {
 13     stackk p = new node;
 14     p->next = NULL;
 15     top = p;
 16 }
 17
 18 void pushstack(stackk &top, char ch)
 19 {
 20     stackk p = new node;
 21     p->e = ch;
 22     p->next = top;
 23     top = p;
 24 }
 25
 26 char printfstack(stackk &top)
 27 {
 28     return top->e;
 29 }
 30
 31 void popstack(stackk &top)
 32 {
 33     stackk p = new node;
 34     p = top;
 35     top = top->next;
 36     delete p;
 37 }
 38
 39 int isempty(stackk &top)
 40 {
 41     if(top->next == NULL)  return 0;
 42     else return 1;
 43 }
 44
 45 int tt(stackk &top)
 46 {
 47     if(top->next->next == NULL) return 1;
 48     else return 0;
 49 }
 50
 51 int main()
 52 {
 53     int n, i, l, j;
 54     char ch, a[1009], b[1009];
 55     while(cin>>n)
 56     {
 57         getchar();
 58         while(n--)
 59         {
 60             stackk L;
 61             initstack(L);
 62             gets(a);
 63             l = strlen(a);
 64             for(i = 0,j = 0; i < l; i++)
 65             {
 66                 if(a[i] == ‘{‘ || a[i] == ‘(‘ || a[i] ==‘[‘)
 67                     pushstack(L,a[i]);
 68                 else if(a[i] == ‘}‘ || a[i] == ‘)‘ || a[i] ==‘]‘)
 69                 {
 70                     b[j] = a[i];
 71                     j++;
 72                 }
 73             }
 74             memset(a,‘0‘,sizeof a);
 75             l = 0;
 76             for(i = 0; i < j; i++)
 77             {
 78                 if(isempty(L)==0)
 79                 {
 80                     a[l] = b[i];
 81                     l=l+1;
 82                 }
 83                 else
 84                 {
 85                     ch = printfstack(L);
 86                     if(b[i] == ‘}‘)
 87                     {
 88                         if(ch == ‘{‘)
 89                                 popstack(L);
 90                         else
 91                             {
 92                                 a[l] = b[i];
 93                                 l++;
 94                             }
 95                     }
 96                     else if(b[i] == ‘)‘)
 97                     {
 98                         if(ch == ‘(‘)
 99                                 popstack(L);
100                         else
101                             {
102                                 a[l] = b[i];
103                                 l++;
104                             }
105                     }
106                     else if(b[i] == ‘]‘)
107                     {
108                         if(ch == ‘[‘)
109                                 popstack(L);
110                         else
111                             {
112                                 a[l] = b[i];
113                                 l++;
114                             }
115                     }
116                 }
117             }
118
119
120             if(isempty(L)==0)
121             {
122                 if(l==0)
123                     cout<<"match"<<endl;
124                 else if(isempty(L)==0&&l==1)
125                     cout<<"miss left"<<endl;
126                 else
127                     cout<<"wrong"<<endl;
128             }
129             else
130             {
131                 if(tt(L)==1&&l==0)
132                     cout<<"miss right"<<endl;
133                 else
134                     cout<<"wrong"<<endl;
135             }
136         }
137     }
138     return 0;
139 }
时间: 2024-08-10 23:16:40

数据结构练习题---括号匹配的相关文章

华为上机练习题--括号匹配检测

题目: 输入一串字符串,其中有普通的字符与括号组成(包括'('.')'.'[',']'),要求验证括号是否匹配,如果匹配则输出0.否则输出1. Smple input:dfa(sdf)df[dfds(dfd)]    Smple outPut:0 分析: 类似于括号字符匹配这类的问题, 我们可以模拟栈的操作来进行验证, 这样问题就简单了, 就是栈的操作 代码如下: package com.wenj.test; import java.util.ArrayList; import java.uti

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

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

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栈中的

数据结构笔记之——括号匹配(栈的应用之一)(SDOJ 2134)

//  度过了上周的悲催状态,我决定好好学习了-- //书上括号匹配是栈的简单应用,正好在SDOJ上看到这道题,顺便做了下 题目地址:SDOJ 2134 数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出

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

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

数据结构复习_栈和队列,应用_括号匹配&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.应

imooc数据结构探险-栈篇 栈应用括号匹配二 由群友启发改良james_yuan老师算法

如图所示 引用群友内容 //老师代码有点麻烦了,不用声明两个mystack的,直接判断是否是左括号, //是的话就在mystack中push另一半括号:如果是右括号且又不是需要的括号, //就直接打印不匹配,如果是需要的右括号,就pop掉左括号.最后看mystack中栈顶是否为0,为0则打印括号匹配 /* 老师最后一点其实错了,default 其实没有必要写,只要把pNeedStack->pop(currentNeed)改为 if(!pNeedStack->pop(currentNeed))

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

引用栈的顺序存储,实现括号匹配问题查找: 头文件: #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

数据结构--利用栈实现括号匹配

/*下午打球去了,虐菜了*/ <pre name="code" class="cpp">#ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include<string.h> #include<assert.h> using namespace std; typedef char ElemType; #define STACK_INIT_SIZE 50 typ