#ifndef stack__h
#define stack__h#include <stdio.h>
#include <stdlib.h>typedef char T; // 数据元素的数据类型struct Stack{T* data;   // 数据元素存储空间的开始地址int top;   // 栈表的当前位置int max;   // 栈表的最大长度
};Stack* Stack_Create(int maxlen);
// 创建栈void Stack_Free(Stack* stk);
// 释放栈void Stack_MakeEmpty(Stack* stk);
// 置为空栈bool Stack_IsEmpty(Stack* stk);
// 判断栈是否空bool Stack_IsFull(Stack* stk);
// 判断栈是否满T Stack_Top(Stack* stk);
// 获取当前栈顶元素T Stack_Push(Stack* stk, T e);
// 将元素e压入栈顶
// 返回栈顶点元素T Stack_Pop(Stack* stk);
// 将栈顶元素出栈
// 返回栈顶元素void Stack_Print(Stack* stk);
// 打印栈顶到栈低的元素void Bracket_Match(T* str, int len);
//  利用stack栈判断括号是否匹配
//  输入参数:字符串序列,字符串长度
//  若匹配输出YES,否则输出NO,末尾换行#endif /* stack__h */

#include <iostream>
#include <cstring>
#include "stack_.h"int main(int argc, const char * argv[]) {// insert code here...// std::cout << "Hello, World!\n";int len;T* str;scanf("%d", &len);str = (T*)malloc(sizeof(T)*len);scanf("%s", str);Bracket_Match(str, len);return 0;
}

#include "stack_.h"Stack* Stack_Create(int maxlen)
// 创建栈
{Stack* stk = (Stack*)malloc(sizeof(Stack));stk->data = (T*)malloc(sizeof(T)*maxlen);stk->max = maxlen;stk->top = -1;return stk;
}void Stack_Free(Stack* stk)
// 释放栈
{free(stk->data);free(stk);
}void Stack_MakeEmpty(Stack* stk)
// 置为空栈
{stk->top = -1;
}bool Stack_IsEmpty(Stack* stk)
// 判断栈是否空
{return -1 == stk->top;
}bool Stack_IsFull(Stack* stk)
// 判断栈是否满
{return stk->top == stk->max-1;
}T Stack_Top(Stack* stk)
// 获取当前栈顶元素
{return stk->data[stk->top];
}T Stack_Push(Stack* stk, T e)
// 将元素e压入栈顶
// 返回栈顶点元素
{if(Stack_IsFull(stk)) {printf("Stack_IsFull(): stack full error when push element to the stack!\n");Stack_Free(stk);exit(0);}else{stk->top += 1;stk->data[stk->top] = e;return Stack_Top(stk);}
}T Stack_Pop(Stack* stk)
// 将栈顶元素出栈
// 返回栈顶元素
{if(Stack_IsEmpty(stk)) {printf("Stack_IsEmpty(): stack empty error when pop element of the stack top!\n");Stack_Free(stk);exit(0);}else{T topE = Stack_Top(stk);stk->top -= 1;return topE;}
}void Stack_Print(Stack* stk)
// 打印栈顶到栈低的元素
{if (Stack_IsEmpty(stk)) {printf("The stack is empty.\n");return;}//printf("The stack contains: ");for (int i=stk->top; i>=0; i--) {printf("%d", stk->data[i]);}printf("\n");}void Bracket_Match(T* str, int len)
//  利用stack栈判断括号是否匹配
//  输入参数:字符串序列,字符串长度
//  若匹配输出YES,否则输出NO,末尾换行
{Stack*s=Stack_Create(105);for(int i=0;i<len;i++){char st=Stack_Top(s);if(st=='('){if(str[i]==')'){Stack_Pop(s);}else{Stack_Push(s,str[i]);}}else if(st=='['){if(str[i]==']'){Stack_Pop(s);}else{Stack_Push(s,str[i]);}}else if(st=='{'){if(str[i]=='}'){Stack_Pop(s);}else{Stack_Push(s,str[i]);}}else{Stack_Push(s,str[i]);}}if(Stack_IsEmpty(s)){printf("YES\n");}else{printf("NO\n");}}

第2关:利用栈判断字符串括号是否匹配相关推荐

  1. 第3关:利用栈判断字符串是否为回文串

    #ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; / ...

  2. 判断字符串括号{}[]()是否闭合—python实现

    判断字符串闭合是一道经典的面试题,首先要知道什么样的括号是闭合的:{[{()}]()} 就是一个闭合的字符串. {[{()}]([)]} 这个里面 ([)] 括号不对称,这种就是不闭合. 常见的解法是 ...

  3. c语言c判断字符数字,c语言问题求教 利用函数判断字符串中是否全为数字

    c语言问题求教 利用函数判断字符串中是否全为数字 答案:4  信息版本:手机版 解决时间 2018-12-22 19:42 已解决 2018-12-22 08:52 c语言问题求教 利用函数判断字符串 ...

  4. JAVA语言:利用递归方法判断字符串是否为回文

    java练习:利用递归方法判断字符串是否为回文(java程序语言设计课后习题4.21) 回文:字符串正向输出和逆向输出结果相同 ,如12321 源代码如下: import java.util.Scan ...

  5. 利用python判断字符串是否为回文

    1 问题 如何用python判断字符串是否为回文. 2 方法 用两个变量left,right模仿指针(一个指向第一个字符,一个指向最后一个字符),每比对成功一次,left向右移动一位,right向左移 ...

  6. 栈判断字符串是否为中心对称_数据结构和算法入门之判断括号字符串的合法性(valid parentheses)...

    今天终于开始看栈的部分咯!栈这个东西没啥好介绍的,我想基本只要写过一丢丢代码的人已经都非常清楚了.今天这个题目是一个非常简单但是也很经典地用到栈这个数据结构的题,废话不多说,原题链接如下: Loadi ...

  7. aspx 判断字符串是否为decimal_python 经典面试题:判断字符串括号是否闭合{}[]()...

    前言 经典面试题:判断一个字符串里面的括号是否闭合,如:{[{()}]()} 就是一个闭合的字符串. {{()}]} 这个里面 ([)] 括号不对称,这种就是不闭合. python判断闭合 解决基本思 ...

  8. c语言利用栈将字符串逆序输出,【C语言】利用栈将数组中字符串逆序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include"stdio.h" #include"stdlib.h" #define STACK_INIT_S ...

  9. oracle利用正则表达式判断字符串只包含数字

    select * from bb where regexp_like(id,'^+?[1-9][0-9]*$');

最新文章

  1. 聊聊在博客园写博客的这两年《Unity 3D脚本编程:使用C#语言开发跨平台游戏》正式出版...
  2. EOS 共识机制 (5)超级节点投票
  3. STM32F4 HAL库开发 -- 温度传感器(DS18B20)
  4. 推理集 —— 思维的误区
  5. acm第二节2020.4.2-4.4补
  6. 机器学习——支持向量机SVM实例(兵王问题,SVM求解步骤以及思路,不求解不编程)
  7. FD.io VPP用户文档:会话层架构与VPP应用
  8. 运维测试工作笔记0004---各种免费开源的测试平台
  9. 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )
  10. python如何设置api接口_python如何使用api接口
  11. python多线程_Python多线程和队列结合demo
  12. 动易html在线编辑器,动易系统解决IE8网站后台编辑器无效问题
  13. PS 在PS中如何等比例放大缩小图片
  14. Elasticsearch学习(二)————搜索
  15. 那些年这么火的MyCat你还不知道吗?
  16. 王东岳《东西方文化溯源与东西方哲学》
  17. Typora使用快捷键
  18. java c2 compiler_C2中的CompilerThread
  19. 嵌入式笔记24 命名空间 输入和输出 C++对C的升级
  20. svo: semi-direct visual odometry 半直接视觉里程计 fast角点匹配 光流匹配 单应变换求位姿 直接法求解位姿 高斯均匀分布混合深度滤波

热门文章

  1. 美多商城之购物车(购物车管理3)
  2. ping不通是不是就真不通?
  3. JSP第二次作业_2小题
  4. 浅谈图分析商业化的机遇与挑战,你注意到了吗?
  5. 从入门到放弃心得 | 我为什么弃用GAN?
  6. 基于OpenCV的网络实时视频流传输
  7. Ret2Libc(2) (有system、无‘/bin/sh’)绕过NX、ASLR
  8. 每日一篇——lodash—array——differenceBy
  9. OSChina 周日乱弹 —— 做一只舔狗,开心时就去舔她,不开心时就舔自己
  10. 《Android App开发入门:使用Android Studio 2.X开发环境》——1-3 Android Studio 快速上手...