括号匹配
在学习数据结构的时候,我们知道,栈有很多的应用,其中比较常见的一个就是括号匹配问题。
在使用栈解决括号匹配问题时,其算法思想是:
(1)初试一个空栈,顺序读入括号;
(2)若是右括号,则与栈顶元素进行匹配,分以下两种情况:
①匹配:弹出栈顶元素并进行下一个元素
②不匹配:该输入序列不合法
(3)若是左括号,则压入栈中;
(4)若是全部元素遍历完毕,栈中非空则序列不合法。
注意:以上标识重点的部分,指出了括号匹配时不合法的两种情况。
注意:
以下代码只能检测 ( ) 和 [ ] 括号
- 代码如下:
#include <stdio.h>
#include <stdlib.h>
#define BASE_SIZE 10
#define UP_SIZE 5
typedef struct stack {
char *base;//栈底指针
char *top;//栈顶指针
int s_size;//栈的长度
} Stack;
int InitStack(Stack *S) {
//初始化栈
S->base=(char *)malloc(BASE_SIZE*sizeof(char));
if(!S->base)
return 0;//开辟空间失败
S->top=S->base;
S->s_size=BASE_SIZE;
return 1;//开辟空间成功
}
int Push(Stack *S,char e) {
if(S