目录
博主使用的C语言编译软件是 vs2022 在有些方面可能跟别的编译软件不太一样,大家可以选择性参考
这是一个对于实现栈的一个案例,其基本操作都是建于栈之上的,所以对于栈的学习,可以参考博主的前两篇文章
1.栈的基本操作
栈的初始化、栈判空、进栈、出栈的实现
//栈的初始化
bool InitSqstack(Sqstack* s)
{
s->top = -1;
}
//判栈空
bool SqstackEmpty(Sqstack* s)
{
if (s->top == -1) return true;
else return false;
}
//入栈
bool Push(Sqstack* s, Elemtype e)
{
if (s->top == Maxsize - 1) return false;
s->data[++s->top] = e;
return true;
}
//出栈
bool Pop(Sqstack* s, Elemtype* e)
{
if (SqstackEmpty(&s)) return false;
*e = s->data[s->top--];
return true;
}
2.括号匹配算法
//括号匹配
bool Isperfact(char* str)
{
Sqstack s;
InitSqstack(&s);
int i;
int len = strlen(str);
for (i = 0; i < len; i++)
{
if (str[i] == '(' || str[i] == '{' || str[i] == '[')
{
Push(&s, str[i]);
}
else
{
if (SqstackEmpty(&s))
return false;
char ch;
Pop(&s, &ch);
if (str[i] == ')' && ch != '(')
return false;
if (str[i] == ']' && ch != '[')
return false;
if (str[i] == '}' && ch != '{')
return false;
}
}
if (SqstackEmpty(&s))
return true;
}
3.代码总结
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Maxsize 50
#define bool char
#define false 0
#define true 1
typedef char Elemtype;
typedef struct Sqstack
{
Elemtype data[Maxsize];
int top;
}Sqstack;
//栈的初始化
bool InitSqstack(Sqstack* s)
{
s->top = -1;
}
//判栈空
bool SqstackEmpty(Sqstack* s)
{
if (s->top == -1) return true;
else return false;
}
//入栈
bool Push(Sqstack* s, Elemtype e)
{
if (s->top == Maxsize - 1) return false;
s->data[++s->top] = e;
return true;
}
//出栈
bool Pop(Sqstack* s, Elemtype* e)
{
if (SqstackEmpty(&s)) return false;
*e = s->data[s->top--];
return true;
}
//括号匹配
bool Isperfact(char* str)
{
Sqstack s;
InitSqstack(&s);
int i;
int len = strlen(str);
for (i = 0; i < len; i++)
{
if (str[i] == '(' || str[i] == '{' || str[i] == '[')
{
Push(&s, str[i]);
}
else
{
if (SqstackEmpty(&s))
return false;
char ch;
Pop(&s, &ch);
if (str[i] == ')' && ch != '(')
return false;
if (str[i] == ']' && ch != '[')
return false;
if (str[i] == '}' && ch != '{')
return false;
}
}
if (SqstackEmpty(&s))
return true;
}
//主函数
int main()
{
char str[Maxsize];
printf("请输入需要判断的括号: ");
scanf_s("%s", str, sizeof(str));
if (Isperfact(str))
printf("匹配成功!!!\n");
else
printf("匹配失败!!!\n");
return 0;
}
ps:博主也是一名学习C语言新手小白代码中如果有需要改正的地方,请各位大佬们评论批评指正。谢谢
有需要借鉴代码的小伙伴,使用时请标注出处,谢谢啦!