文章目录
数据结构
前言
博主介绍:
– 本人是一个不知名的二本院校计科专业大二学生,每天除了上课就是在学校里的一个小组学习,之前学习了JAVA后学了Python如今在专注于学习Golang语言,每天总是很多胡思乱想,想一些不着调的想法,想做很多很多的软件让很多朋友们使用,但如今的技术还不到家,希望可以做出很多很多的APP给大家一起用,现仍需继续努力!一起加油!
文章目录
头文件
#include <cstdio>
#include <cstring>
空栈初始化状态
int top = -1; //初始状态的空栈,或者说栈顶元素所在位置
入栈操作
void push(char *a, int elem) {//入栈操作
a[++top] = elem;
}
出栈操作
void pop(char *a) {//出栈操作
if (top == -1) {
return;//空栈返回
}
top--;
}
辅助函数
char visit(char *a) {
//调取栈顶元素,不等于出栈,如果栈为空,为使程序不发生错误,返回空字符
if (top != -1) {
return a[top];
}
else
{
return ' ';
}
}
主函数
int main() {
char a[80];//定义了一个数组,长度80
char bracket[100];
printf("请输入括号序列:");
scanf("%s", bracket);
getchar();
int length = (int)strlen(bracket);
for (int i = 0; i < length; i++) {
//如果是左括号,直接压栈
if (bracket[i] == '(' || bracket[i] == '{') {
push(a, bracket[i]);
}
else
{
//右边括号的话要判断与栈顶元素是否匹配,若匹配则出栈运行,反之退出
if (bracket[i] == ')') {
if (visit(a) == '(') {
pop(a);
}
else
{
printf("括号不匹配");
return 0;
}
}
else
{
if (visit(a) == '{') {
pop(a);
}
else
{
printf("括号不匹配");
return 0;
}
}
}
}
//如果所有括号匹配完成,栈内为空,说明所有括号全部匹配成功
if (top != -1) {
printf("括号不匹配");
}
else {
printf("括号匹配");
}
}
所有代码
#include <cstdio>
#include <cstring>
int top = -1; //初始状态的空栈,或者说栈顶元素所在位置
void push(char *a, int elem) {//入栈操作
a[++top] = elem;
}
void pop(char *a) {//出栈操作
if (top == -1) {
return;//空栈返回
}
top--;
}
char visit(char *a) {
//调取栈顶元素,不等于出栈,如果栈为空,为使程序不发生错误,返回空字符
if (top != -1) {
return a[top];
}
else
{
return ' ';
}
}
int main() {
char a[80];//定义了一个数组,长度80
char bracket[100];
printf("请输入括号序列:");
scanf("%s", bracket);
getchar();
int length = (int)strlen(bracket);
for (int i = 0; i < length; i++) {
//如果是左括号,直接压栈
if (bracket[i] == '(' || bracket[i] == '{') {
push(a, bracket[i]);
}
else
{
//右边括号的话要判断与栈顶元素是否匹配,若匹配则出栈运行,反之退出
if (bracket[i] == ')') {
if (visit(a) == '(') {
pop(a);
}
else
{
printf("括号不匹配");
return 0;
}
}
else
{
if (visit(a) == '{') {
pop(a);
}
else
{
printf("括号不匹配");
return 0;
}
}
}
}
//如果所有括号匹配完成,栈内为空,说明所有括号全部匹配成功
if (top != -1) {
printf("括号不匹配");
}
else {
printf("括号匹配");
}
}