7.4 括号匹配

7-5 parenthesis.c

 1 #include <stdio.h>
 2 #define MAXLENGTH 80   //最大字符串长度
 3 #define STACK_INIT_SIZE  100
 4 #define SIZE_INCREMENT  5
 5 typedef struct //栈结构
 6 {
 7     int *base; //栈底
 8     int *top; //栈顶
 9     int stacksize; //栈大小
10 }SqStack,*SQSTACK;
11 int StackInit(SQSTACK s) //初始化栈
12 {
13     s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
14     if(!(s->base))
15         exit(0);
16     s->top=s->base;
17     s->stacksize=STACK_INIT_SIZE;
18     return 1;
19 }
20 int PUSH(SQSTACK s,int e) //入栈
21 {
22     if(s->base+s->stacksize==s->top)
23     {
24         s->base=(int *)realloc(s->base,(SIZE_INCREMENT+s->stacksize)*sizeof(int));
25         s->top=s->base+s->stacksize;
26         s->stacksize+=SIZE_INCREMENT;
27     }
28     *(s->top)=e;
29      s->top+=1;
30      return 1;
31 }
32 int POP(SQSTACK s,int *p) //出栈
33 {
34     if(s->base==s->top) //空栈
35         return 0;
36      *p=*(s->top-1);
37      s->top--;
38      return 1;
39 }
40 int StackLength(SQSTACK s) //栈的长度(元素数量)
41 {
42     return (s->top-s->base);
43 }
44 int StackFree(SQSTACK s) //释放栈
45 {
46     free(s->base);
47     s->top=s->base=NULL;
48     return 1;
49 }
50
51 void ParenthesisMatch(char *expr)
52 {
53     SqStack s;
54     int i,len,no;
55     if(!StackInit(&s)) //初始化栈失败
56         exit(0);//退出
57     len=strlen(expr); //取字符串长度
58     for(i=1;i<=len;i++)
59     {
60         if(expr[i-1]==‘(‘)
61             PUSH(&s,i); //左插号位置序号入栈
62         else if(expr[i-1]==‘)‘)
63         {
64             if(POP(&s,&no))
65                 printf("括号配对:%d -- %d\n", no,i);
66             else
67                 printf("没有左括号与位于第%d个位置的右侧号配对!\n",i);
68         }
69     }
70     while(StackLength(&s)>0) //若栈中还有数据,表示还有左括号没配对
71     {
72         POP(&s,&no);
73         printf("位于第%d位置的左括号没有配对的右括号!\n", no);
74     }
75     StackFree(&s);                                        //释放栈
76 }
77 int main()
78 {
79     char expr[MAXLENGTH];
80     printf("输入一个带括号的表达式(长度不超过%d个字符):\n",MAXLENGTH);
81     scanf("%s",expr);
82     ParenthesisMatch(expr);
83
84     getch();
85     return 0;
86 }
时间: 2024-10-24 05:14:20

7.4 括号匹配的相关文章

nyoj 括号匹配

这个方程有两种形式,本文采用 if(s[i]=s[j]) dp[i][j]=d[i-1][j-1] dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]) (i=<k<j) 其实与另一种方法比较:根据j的所有匹配情况取最小值 1.i到j无匹配,取为dp[i][j-1]+1 2.列举所有匹配情况 dp[i][k-1]+dp[k+1][j] 取上述所有情况最小值 两者都能获得正确的结果. 同时两者的初始化为 dp[i][j]==1 if(i==j) 规划方向为:  

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

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

堆栈_括号匹配

class Solution { public: bool isValid(string s) { if(s.empty()) return false; stack<int> s1; int n=s.size(); for(int i=0;i<n;i++) { if(s[i]=='('||s[i]=='['||s[i]=='{') s1.push(s[i]); else if(s1.empty()) return false; else if((s[i]==')'&&s

括号匹配(二)

括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来.如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的 输入 第一行输入一个正整数N,表示测试数据组数(N<=10)每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不

动态规划(2)--括号匹配(二)

括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来.如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的 输入 第一行输入一个正整数N,表示测试数据组数(N<=10)每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超

行编辑程序、括号匹配检验

行编辑程序.括号匹配检验程序都是利用的栈的数据结构.而这两个 小程序也非常好的显示了栈先进后出的思想.由于程序本身很简短.清晰,所 以也就不做多的解释了,直接上代码了. 行编辑程序: #include<iostream> #include<stack> using namespace std; int main() { stack<char> sta; char ch = getchar(); while(ch!=EOF) { while(ch!=EOF&&am

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

题目链接:http://ac.jobdu.com/problem.php?pid=1153 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus // // 1153 括号匹配问题.cpp // Jobdu // // Created by PengFei_Zheng on 08/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdio.h>

栈的应用-判断括号匹配

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

集训第五周动态规划 J题 括号匹配

Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence, if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and if a and b are regul

括号匹配的检验

#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