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

本周老师作业留了两个。先上传一个吧。那个有时间我再传上来~

本周的要求:

1.给出顺序栈的存储结构定义。

2.完成顺序栈的基本操作函数。

1)      初始化顺序栈

2)      实现入栈和出栈操作

3)      实现取栈顶元素和判空操作

括号匹配问题

3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果。

4.程序调试运行并保存输出结果。

5.整理并提交实验作业。

  1 #include <cstdio>
  2 #include <cstring>
  3 #define Stack_Size 50
  4
  5 typedef struct
  6 {
  7     char a[Stack_Size];
  8     int top;
  9 }SeqStack;
 10
 11 int IsEmpty(SeqStack *S)//栈判空
 12 {
 13     return S->top == -1;
 14 }
 15
 16 int Match(char ch1,char ch2)//字符串匹配
 17 {
 18     switch(ch2){
 19     case ‘)‘:
 20         if(ch1==‘(‘)
 21             return 1;
 22         break;
 23     case ‘}‘:
 24         if(ch1==‘{‘)
 25             return 1;
 26         break;
 27     case ‘]‘:
 28         if(ch1==‘[‘)
 29             return 1;
 30         break;
 31     }
 32     return 0;
 33 }
 34
 35 void InitStack(SeqStack * S)//初始化顺序栈
 36 {
 37     S->top = -1;
 38 }
 39
 40 void Push(SeqStack * S,char x)//进栈
 41 {
 42     S->top++;
 43     S->a[S->top]=x;
 44 }
 45
 46 void Pop(SeqStack * S,char *x)//出栈
 47 {
 48     *x=S->a[S->top];
 49     S->top--;
 50 }
 51
 52 void GetTop(SeqStack * S,char *x)
 53 {
 54     *x=S->a[S->top];
 55 }
 56
 57
 58 void BracketMatch(char *str)
 59 {
 60     SeqStack S;
 61     char ch;
 62     InitStack(&S);
 63     for(int i=0;str[i]!=‘\0‘;i++)
 64     {
 65         switch(str[i]){
 66         case ‘(‘:
 67         case‘[‘:
 68         case‘{‘:
 69             Push(&S,str[i]);
 70             break;
 71         case ‘)‘:
 72         case‘]‘:
 73         case‘}‘:
 74             if(IsEmpty(&S)){
 75                 printf("\n右括号多余!\n");
 76                 return ;
 77             }
 78             else{
 79                 GetTop(&S,&ch);
 80                 if(Match(ch,str[i]))
 81                     Pop(&S,&ch);
 82                 else{
 83                     printf("\n 对应的左右括号不同类!\n");
 84                     return ;
 85                 }
 86             }
 87
 88         }
 89     }
 90     if(IsEmpty(&S))
 91         printf("\n括号匹配!\n");
 92     else
 93         printf("\n左括号多余!\n");
 94 }
 95
 96
 97 int main()
 98 {
 99     char strr[50];
100     printf("请输入各种括号\n");
101     gets(strr);
102     BracketMatch(strr);
103
104     return 0;
105 }
时间: 2024-11-08 16:56:51

括号匹配问题(顺序栈实现)的相关文章

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

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

题目1153:括号匹配问题(栈的应用)

题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6726 解决:2926 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号.不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注. 输入: 输入包括多组数据,每组数据一行,包含一

【数据结构】栈的应用 括号匹配

括号配对问题: 假设一个表达式中包含三种类型的括号:(),{ },[],嵌套顺序任意 { [()()] } 1  2 3 4  5  6 7  8 引入"期待的急迫程度"概念,例如当接受第一个括号 { ,则它期待与第8个 } 匹配,然而当接受到第二个 [ 时,此时[最期待和第七个 ] 匹配. #ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include <malloc.h> #include &l

括号匹配(链栈实现)

/* 建立链栈实现括号匹配问题 创建栈,判断是否空栈 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #define status int typedef struct node { char ch; node* next; }SNode; typedef struct { SNode *top; //SNode *base; }Stack; //创建空栈 base 赋值为NULL, top 指向栈顶

猿辅导:字符压缩算法(括号匹配)

题目描述 猿辅导APP需要下发一些宣传文本给学生,工程师们使用了一种字符压缩算法,为了简单起见,假设被压缩的字符全部为大写字母序列,A,B,C,D,E……Z,压缩规则如下: 1. AAAB 可以压缩为 A3B(单字符压缩不加括号) 2. ABABA 可以压缩为 (AB)2A (多字符串压缩才加括号) 输入数据保证不会出现冗余括号,且表示重复的数字一定合法且大于1,即不会出现: (A)2B ---------(应为:A2B) ((AB))2C ---------(应为:(AB)2C) (A)B -

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

#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

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

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

栈的应用之括号匹配的检验

栈的实际应用很多,其中括号匹配是很常见的例子.下面列出基本算法和源代码,标明注释以便日后复习和翻阅. Description: 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的 顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上 述括号的表达式,检验括号是否配对.本题给出部分check()函数,要求将check()函数补充完整,并完成 整个程序. 算法: 代码: 1 void c

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

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