数据结构学习之顺序栈应用的案例(有效的括号)

  • 实例要求:

  • 给定一个只包括 '(',')','{','}','[',']'字符串 s判断字符串是否有效

  • 有效字符串需满足的条件:

  • 1、左括号必须用相同类型的右括号闭合;

  • 2、左括号必须以正确的顺序闭合

  • 3、每个右括号都有一个对应的相同类型的左括号;

  • 相关案例:
    数据结构学习之顺序栈应用的案例(有效的括号)_第1张图片

  • 实例分析:

  • 1、利用strlen函数求出该字符串长度并且定义一个顺序栈(本代码将使用一个字符型数组和整形变量替代);

  • 2、for循环遍历字符串,当遇到’(‘,或’[‘,或’{',入栈

  • 3、当遍历到’)‘,或’]‘,或’}'且顺序栈为NULL,则本次有效的括号匹配false

  • 4、当遍历到’)‘,或’]‘,或’}‘且顺序栈为非NULL出栈顺序栈中的元素,并匹配’)‘,或’]‘,或’}',匹配成功返回true,失败则返回false

  • 5、当遍历好字符串后,若顺序栈为非NULL,则有效括号匹配失败,匹配成功返回true,失败则返回false

  • 示例代码:

	bool isValid(char* s) {
	
	    int len = strlen(s);
	
	    char a[len];    //定义顺序栈
	    int top = 0;    //定义栈顶指针
	    char b;
	
	    //遍历字符串
	    for(int i = 0; i < len; i++)
	    {
	        if(s[i] == '(' || s[i] == '[' || s[i] == '{')
	        {
	
	            a[top] = s[i];  //入栈
	            top++;
	           
	        }
	        else
	        {
	            if(top == 0)
	            {
	                return false;  
	            }
	            
	            top--;
	            b = a[top]; //出栈
	
	            if(s[i] == ')' && b != '(')
	            {
	                return false;
	            }
	            if(s[i] == ']' && b != '[')
	            {
	                return false;
	            }
	            if(s[i] == '}' && b != '{')
	            {
	                return false;
	            }
	
	
	        }
	    }
	    if(top != 0)
	    {
	        return false;
	    }
	
	    return true;
	    
	}
  • 运行结果:
    数据结构学习之顺序栈应用的案例(有效的括号)_第2张图片
    数据结构学习之顺序栈应用的案例(有效的括号)_第3张图片

你可能感兴趣的:(笔试题,数据结构)