首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[数据结构] 括号符的匹配

[数据结构] 括号符的匹配

作者头像
泰坦HW
发布2020-07-22 16:19:52
发布2020-07-22 16:19:52
1.4K0
举报
文章被收录于专栏:Titan笔记Titan笔记
  • 采用链式存储实现栈的初始化、入栈、出栈操作。
  • 给定一个括号序列,里面包括圆括号和方括号,编程检验该括号序列中括号是否配对
代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
// Code by Titan 2020-03-16
// 定义堆栈结构
typedef struct Node *Position;
typedef Position Stack;
struct Node {
  char ch;
  Position next;
};
//定义初始化堆栈的操作
Stack initS() {
  Stack S =(Stack)malloc(sizeof(struct Node));
  S->next=NULL;
  return S;
}
// 判断堆栈是否为空
int isEmpty(Stack S) {
  if(S->next==NULL) {
    return 1;
  } else {
    return 0;
  }
}
// 定义压入堆栈的操作
void Push(char data,Stack S) {
  Stack Temp = (Stack)malloc(sizeof(struct Node));
  Temp->ch=data;
  Temp->next = S->next;
  S->next=Temp;
}

//定义删除栈顶节点并返回的操作
char Pop(Stack S) {
  if(isEmpty(S)) {
    return NULL;
  } else {
    Stack Temp=S->next;
    char ch = Temp->ch;
    S->next=Temp->next;
    free(Temp);
    return ch;
  }
}

int main() {
  char temp,get;
  int flag=1; // 判断括号符是否匹配的标志
  Stack S = initS(); // 初始化一个堆栈
  // 下面是判断流程
  while(scanf("%c",&temp),temp!='\n') {
    if(temp!=']' && temp !=')') {
      Push(temp,S);
    } else if(temp == ')' ) {
      get = Pop(S);
      if(get !='(') {
        flag=0;
        break;
      }
    } else if(temp == ']' ) {
      get = Pop(S);
      if(get !='[') {
        flag=0;
        break;
      }
    }
  }
  // 只有当堆栈空以及Flag为1时,才能判断括号符匹配 
  if(flag && isEmpty(S)){
    printf("括号符匹配!\n");
  }else{
    printf("括号符不匹配!\n");
  }
  
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年03月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档