前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[数据结构] 括号符的匹配

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

作者头像
泰坦HW
发布2020-07-22 16:19:52
1.1K0
发布2020-07-22 16:19:52
举报
文章被收录于专栏:Titan笔记Titan笔记Titan笔记
  • 采用链式存储实现栈的初始化、入栈、出栈操作。
  • 给定一个括号序列,里面包括圆括号和方括号,编程检验该括号序列中括号是否配对
#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 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档