`
jaychang
  • 浏览: 719592 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

链式栈实现括号匹配问题

 
阅读更多
#include<stdlib.h>
#include<string.h>
#include<iostream>

using namespace std;

#define FALSE 1

typedef struct StackNode{
  char op;
  StackNode * next;
}StackNode,*StackTop;

char operation[50];int length;

//链式栈栈顶
StackTop top=(StackNode *)malloc(sizeof(StackNode));

//初始化链式栈
void InitialStack()
{
  top->next=NULL;
}

//判断栈是否为空
bool IsEmpty()
{
  bool flag_bool;
  top->next==NULL?flag_bool=true:flag_bool=false;
  return flag_bool;
}

//将栈顶元素Pop,并返回栈顶元素值
char Pop()
{
  StackNode * temp=(StackNode *)malloc(sizeof(StackNode));
  temp=top->next;
  if(temp==NULL)return FALSE;
  char op=temp->op;
  top->next=temp->next;
  free(temp);
  return op;
}

//取栈顶元素值
char GetTop()
{
  return top->next==NULL?FALSE:top->next->op;
}

//将新元素压入栈
void Push(char char_op)
{
  StackNode * temp=(StackNode *)malloc(sizeof(StackNode));
  temp->op=char_op;
  temp->next=top->next;
  top->next=temp;
}

//判断括号与栈顶的左括号是否匹配
bool Match(char op1,char op2)
{
  if((op1=='('&&op2==')')||(op1=='{'&&op2=='}')||(op1=='['&&op2==']'))
    return true;
  else
    return false;
}

void procExecute()
{
  length=strlen(operation);
  for(int i=0;i<length;i++)
 {
   switch(operation[i]){
     case '(':
     case '{':
     case '[':
     Push(operation[i]);
     break;
     case ')':
     case '}':
     case ']':
     if(IsEmpty()){
       cout<<"右括号多余\n";
       return;
     }else{
         if(Match(GetTop(),operation[i])){
            Pop();break;
         }
         else{
            cout<<"左右括号不匹配\n";
            return;
         }
      }
    }
  }
  if(IsEmpty())
     cout<<"括号匹配成功!\n";
  else
     cout<<"左括号多余\n";
 }

int main()
{
  while(cin>>operation)
  {
    InitialStack();
    procExecute();
  }
  return 0;
 }
分享到:
评论

相关推荐

    括号匹配 用栈实现检测括号是否匹配

    用栈实现括号匹配的检测,链式栈实现 ()[]的检测可以实现

    LeetCode判断字符串是否循环-Queue_Stack:依赖数组实现栈,实现链式队列,实现循环队列,两个栈实现一个队列,两个队列实现一个栈

    3、栈的练习题之括号匹配 可以在leetcode上找到 明确,括号的几种情况 1、左右括号匹配 2、左括号多 3、右括号多 4、括号次序不匹配 步骤: 0、遍历给定字符串的每个元素 1、判断元素是否是左括号,若是左括号,则...

    C++数据结构实验二:栈与队列的应用

    3.掌握栈和队列的逻辑结构特点、顺序存储结构、链式存储结构、顺序栈和链栈的结构体类型定义、循环队列和链队列的结构体类型定义、栈和队列在两种存储结构上的各种基本操作的实现算法。 4.将任意十进制数转换为三种...

    数据结构与算法实验(C++):链栈实验-代码

    算术表达式的括号匹配合法性判断。(表达式中包括的括号类型有圆括号()、方括号[]以及花括号{}) c.简单算术表达式求值。(表达式里包含运算数、+、-、*、/四类运算符及小括号()) 2.适用人群: 数据结构与算法...

    华南 数据结构上机实验代码 完整代码

    括号匹配检验 行编辑程序 表达式求值 队列的应用——银行客户平均等待时间 计算next值 KMP算法 二叉树的构建及遍历操作 实现二叉排序树的各种算法(1) 实现二叉排序树的各种算法(2) 哈夫曼树 顺序查找 二...

    数据结构.chm 数据结构讲义

    本书内容为数据结构讲义。 1、0、0 绪论 1、1、0 什么是数据结构 1、2、0 基本概念和术语 1、3、0 抽象数据类型的表示与实现 1、4、0 算法和算法分析 1、4、1 算法 1、4、2 算法设计的要求 ...3、2、2 括号匹配的检验

    左耳朵耗子leetcode-blog:知识地图以及要学习的东西(世界很大,好好学习,出去看看,不断成长)

    链式栈 栈是否为空 括号匹配 如何实现浏览器的前进和后退 4. 队列 队列的基本概念 顺序队列 链式队列 循环队列 队空和队满的判断条件 阻塞队列 并发队列 5.串 字符串匹配 BF算法 RK算法 KMP算法 Trie树 AC自动机 6. ...

    传智播客扫地僧视频讲义源码

    12_数组中括号与指针关系和数组名常量指针分析 13_字符串一级指针内存模型_传智扫地僧 14_字符串copy函数技术推演 15_字符串copy函数强化训练_判断null_引入辅助指针变量_传智扫地僧 16_项目开发模型强化_strstr_...

    C语言版数据结构与算法分析-严蔚敏经典视频教程

    03-002栈的应用、数制转换、括号匹配、行编辑问题、迷宫问题 03-003栈的应用:表达式求值、后缀表达式的表示 03-004队列的定义与存储、顺序队列、链式队列、循环队列 04-001串的定义、表示与实现 04-002串的模式...

    严蔚敏 数据结构(C语言版) 代码 23490 书中算法

    3.2.2 括号匹配的检验 49 3.2.3 表达式求值 51 3.3 栈与递归 54 3.3.1 采用递归算法解决的问题 54 3.3.2 递归过程与递归工作栈 57 3.3.3 递归算法的效率分析 59 3.3.4 将递归转换为非递归的方法 60 ...

    严蔚敏:数据结构题集(C语言版)

    3.2.2 括号匹配的检验 3.2.3 行编辑程序 3.2.4 迷宫求解 3.2.5 表达式求值 3.3 栈与递归的实现 3.4 队列 3.4.1 抽象数据类型队列的定义 3.4.2 链队列--队列的链式表示和实现 3.4.3 循环队列--队列的顺序表示和实现 ...

    数据结构、算法与应用:C++语言描述(原书第2版)第二部分

    8.5.1 括号匹配 8.5.2 汉诺塔 8.5.3 列车车厢重排 8.5.4 开关盒布线 8.5.5 离线等价类问题 8.5.6 迷宫老鼠 8.6 参考及推荐读物 第9章 队列 9.1 定义和应用 9.2 抽象数据类型 9.3 数组描述 9.3.1 描述 9.3.2 类...

    数据结构的电子书(chm版)

    3、2、2 括号匹配的检验 3、2、3 行编辑程序 实验三 3、2、4 迷宫求解 3、2、5 表达式求值 3、3、0 栈与递归的实现 3、4、0 队列 3、4、1 抽象数据类型队列的定义 3、4、2 链队列-队列的链式表示和实现 3、4、3 ...

    c语言数据结构

    3、2、2 括号匹配的检验 3、2、3 行编辑程序 实验三 3、2、4 迷宫求解 3、2、5 表达式求值 3、3、0 栈与递归的实现 3、4、0 队列 3、4、1 抽象数据类型队列的定义 3、4、2 链队列-队列的链式表示和实现 3、4、3 ...

    《数据结构》实验

    要求:熟练掌握线性表的循环链式和双链式链接存储结构及在其上实现线性表的各种基本运算的方法。 栈和队列 时数 2 性质 验证 内容:1、设单链表中存放着n个字符,设计算法,判断该字符串中是否有中心对称关系。例如...

    数据结构与算法教学大纲程序代码

    要求:熟练掌握线性表的循环链式和双链式链接存储结构及在其上实现线性表的各种基本运算的方法。 四:内容:1、设单链表中存放着n个字符,设计算法,判断该字符串中是否有中心对称关系。例如:xyzzyx、xyzyx都算是...

    LuaBind 源码 (Lua增强库)

    LuaBind 将会生成代码来检查Lua栈的内容是否匹配你的函数的签名. 它会隐式的在 派生类之间进行类型转换,并且它会按照尽量少进行隐式类型转换的原则经行匹配.在 一个函数调用中,如果函数是重载过的,并且重载函数的...

Global site tag (gtag.js) - Google Analytics