这次没有用链栈,而是用的顺序栈
这该写点什么呢…
在遇到多种情况判断的时候,在子函数里面最后是返回bool,不要在里面直接输出结果
这样if语句就变得很烦,搞不好就会顺序cout下去
就写这些吧,OK!
还有一点,视频里,老师说,考试的时候栈可以用push、pop等操作,不过最好用注释说明一下功能
现在我还对伪代码,可以伪到什么程度还不知道,哈哈哈哈哈哈哈哈哈
#include<iostream>
using namespace std;
#define Maxsize 30
typedef struct Stack {
char data[Maxsize];
int top;
}Sqstack;
//初始化
void InitStack(Sqstack& S) {
S.top = 0;//指向元素要插入的位置
//这里没有使用书上的初始化为-1,也是为了练习
}
//入栈
bool push(Sqstack& S,char c) {
if (S.top == Maxsize + 1)
return false;
S.data[S.top++] = c;
return true;
}
//出栈
bool pop(Sqstack& S, char& c) {
if (S.top == 0)
return false;//空
c = S.data[--S.top];
return true;
}
//判空
bool empty(Sqstack S) {
if (S.top == 0)
return true;
return false;
}
//括号匹配
bool seek(Sqstack& S, char c[]) {
int len = strlen(c);
char pop_char;
for (int i = 0; i < len; i++) {
if (c[i] == '(' || c[i] == '{' || c[i] == '[')
push(S, c[i]);//左括号就入栈
else {
pop(S, pop_char);
if (c[i] == ')' && pop_char != '(')
return false;
if (c[i] == ']' && pop_char != '[')
return false;
if (c[i] == '}' && pop_char != '{')
return false;
}
}
if (empty(S))//空返回true
return true;
return false;
}
int main() {
Sqstack S;
InitStack(S);
char c[10];
cin >> c;
if (seek(S, c))
cout << "成功" << endl;
else
cout << "失败" << endl;
return 0;
}