栈的简单应用:括号匹配

栈在解决括号匹配问题中是一个非常有用的工具。括号匹配问题主要出现在编程语言和数学表达式中,需要确保每种类型的开括号(如小括号"()",大括号"{}",方括号"[]")都有相应的闭括号与之匹配,并且这些括号的顺序是正确的。

#define maxSize 1024
//括号匹配函数
bool match(char* str)
{
	char stack[maxSize];
	//栈顶序号
	int top = -1;
	//str作为指针用
	while (*str != '\0')
	{
		//匹配的思路是,对括号进行出栈和入栈操作
		//如果是( 则入栈,如果是 )则与栈顶匹配,如果成功,则出栈
		//如果失败,则表示括号不匹配
		if (*str == '(' || *str == '[' || *str == '{')
		{
			top++;
			if (top >= maxSize)
			{
				printf("栈溢出\n");
				return;
			}
			stack[top] = *str;
		}
		if (*str == ')')
		{
			//相等则出栈
			if (stack[top] == '(')
			{
				top--;
			}
			//如果不匹配则返回false
			else 
			{
				return false;
			}
		}
		if (*str == ']')
		{
			//相等则出栈
			if (stack[top] == '[')
			{
				top--;
			}
			//如果不匹配则返回false
			else
			{
				return false;
			}
		}
		if (*str == '}')
		{
			//相等则出栈
			if (stack[top] == '{')
			{
				top--;
			}
			//如果不匹配则返回false
			else
			{
				return false;
			}
		}
		str++;
	}
	//已经将字符串遍历完
	//如果栈中没有括号,那么说明全部匹配
	if (top == -1)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	char str[1024];
	fgets(str, 1024, stdin);
	if (match(str))
	{
		printf("匹配\n");
	}
	else
	{
		printf("不匹配\n");
	}
	return 0;
}

match 函数

  • 循环遍历字符串:函数首先通过 while 循环遍历字符串中的每一个字符。
  • 处理开括号:如果字符是开括号(([{),则将其压入栈中,并更新栈顶位置。
  • 处理闭括号:如果字符是闭括号()]}),则检查栈顶是否为对应的开括号。如果是,则将栈顶元素出栈(即弹出);如果不是,则返回 false,表示括号不匹配。
  • 遍历结束后:如果栈为空(即 top == -1),则说明所有括号都匹配,返回 true;否则,返回 false,表示还有未匹配的括号。

请注意,这个示例代码没有处理栈溢出的情况,只是简单地检查栈是否已满。在实际应用中,你可能需要更复杂的错误处理机制来确保程序的健壮性。此外,代码假设输入字符串不会超过 MAX_SIZE,这也需要在实际使用时加以考虑。

相关推荐

  1. 简单应用括号匹配

    2024-04-24 18:44:05       11 阅读
  2. ----7-9 括号匹配

    2024-04-24 18:44:05       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 18:44:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 18:44:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 18:44:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 18:44:05       18 阅读

热门阅读

  1. Vue.js(过滤器(Filter))

    2024-04-24 18:44:05       12 阅读
  2. class094 贪心经典题目专题6【左程云算法】

    2024-04-24 18:44:05       10 阅读
  3. c# 连接数据库、excel数据批量导入到数据库

    2024-04-24 18:44:05       11 阅读
  4. Semaphore

    Semaphore

    2024-04-24 18:44:05      9 阅读
  5. Dubbo

    Dubbo

    2024-04-24 18:44:05      11 阅读
  6. jvm学习笔记

    2024-04-24 18:44:05       9 阅读
  7. 快速制作个人电子签名

    2024-04-24 18:44:05       8 阅读
  8. TypeScript学习笔记7-枚举

    2024-04-24 18:44:05       10 阅读
  9. TCP案例-实时群聊

    2024-04-24 18:44:05       9 阅读