c语言通过栈判断括号匹配是否配对

 更新时间:2023年09月22日 09:16:25   作者:gnip  
前面实现了栈的基本数据结构,这里来做一个联系,用栈来解决一道比较常见的算法题,就是括号配对是否满足规则,文中有相关的代码示例供大家参考,需要的朋友可以参考下

实现

描述

给定一组括号,判断是否满足配对。

代码

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define bool char 
#define true 1
#define MAX_LEN 10
#define false 0
typedef  char ElementType;
typedef struct Stack {
	int top;
	ElementType stackList[MAX_LEN];
} Stack;
bool fn(char arr[], int len, Stack* S);
bool push(Stack* S, ElementType data);
bool pop(Stack* S, ElementType* x);
bool intStack(Stack* S);
int main() {
	Stack S;
	intStack(&S);
	char brackList[] = {'(', '{','(',')','}','{','}','}' };
	printf("%d", fn(brackList, sizeof(brackList) / sizeof(brackList[0]), &S));
}
bool fn(char arr[], int len, Stack* S) {
	for (int i = 0; i < len; i++) {
		if (arr[i] == '{' || arr[i] == '(') {
			push(S,arr[i]);
			printf("%c", arr[i]);
		}
		else {
			if (S->top == 0) {
				return false;
			}
			ElementType topData;
			pop(S, &topData);
			if (topData == '(' && arr[i] != ')') {
				return false;
			}
			else if (topData == '{' && arr[i] != '}') {
				return false;
			}
		}
	}
	if (S->top == 0) {
		return true;
	}
	return false;
}
//初始化
bool intStack(Stack* S) {
	for (int i = 0; i < MAX_LEN; i++) {
		S->stackList[i] = 0;
	}
	S->top = 0;
	return true;
}
//入栈
bool push(Stack* S,ElementType data) {
	S->top++;
	S->stackList[S->top] = data;
	return true;
}
//出栈
bool pop(Stack* S, ElementType *x) {
	*x = S->stackList[S->top];
	S->stackList[S->top] = 0;
	S->top--;
	return true;
}

到此这篇关于c语言通过栈判断括号匹配是否配对的文章就介绍到这了,更多相关c语言判断是否配对内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 学生成绩管理系统C语言代码实现

    学生成绩管理系统C语言代码实现

    这篇文章主要为大家详细介绍了C语言代码实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++实现添加桌面右键新建菜单

    C++实现添加桌面右键新建菜单

    本文给大家汇总了3个版本的C++实现添加桌面右键新建菜单的代码,陆陆续续写的,有需要的小伙伴可以根据自己的需求来选择
    2016-01-01
  • C语言动态规划多种背包问题分析讲解

    C语言动态规划多种背包问题分析讲解

    背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高
    2022-04-04
  • opencv帧差法找出相差大的图像

    opencv帧差法找出相差大的图像

    这篇文章主要为大家详细介绍了opencv帧差法找出相差大的图像,包含访问mat的像素值,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 详解Matlab中自带的Java操作合集

    详解Matlab中自带的Java操作合集

    其实Matlab中也有一些自带的Java操作,例如:获取鼠标在全屏位置、获取当前剪切板内容、获取鼠标处像素颜色等,本文总结了七个这样的操作,感兴趣的可以了解一下
    2022-03-03
  • 详解C++ 拷贝构造函数和赋值运算符

    详解C++ 拷贝构造函数和赋值运算符

    本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。最后,简单的分析了下深拷贝和浅拷贝的问题。有需要的朋友可以看下
    2016-12-12
  • C++面试八股文之STL标准模板库使用详解

    C++面试八股文之STL标准模板库使用详解

    这篇文章主要为大家介绍了C++面试八股文之STL标准模板库使用详解,<BR>有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 浅析string 与char* char[]之间的转换

    浅析string 与char* char[]之间的转换

    与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*
    2013-10-10
  • 详解C语言实现空间索引四叉树

    详解C语言实现空间索引四叉树

    本文主要介绍了用C语言实现四叉树,对算法感兴趣的同学,可以参考下,并且试验一下。
    2021-05-05
  • C++实现假装蓝屏整蛊小程序

    C++实现假装蓝屏整蛊小程序

    因为工作的需要,有时候我们离开时并不想让别人看到我们电脑的内容,所以本文为大家分享了一个基于C++实现的假装蓝屏的小程序,需要的可以参考下
    2023-06-06

最新评论