引用栈的顺序存储,实现括号匹配问题查找:

头文件:

#pragma once#include<string.h>
#include<stdlib.h>#define MAX 1024//顺序栈
struct SeqStack{void *data[MAX];int size;
};#ifdef __cplusplus
extern "C"{
#endif//初始化栈void *Init_SeqStack();//入栈void Push_SeqStack(void *stack, void *data);//出栈void Pop_SeqStack(void *stack);//获得大小int Size_SeqStack(void *stack);//获得栈顶元素void *Top_SeqStack(void *stack);//销毁栈void Destroy_SeqStack(void *stack);

头文件实现:

#include"SeqStack.h"//初始化栈
void *Init_SeqStack(){struct SeqStack *stack = malloc(sizeof(struct SeqStack));stack->size = 0; for (int i = 0; i < MAX; i ++){stack->data[i] = 0;}return stack;
}
//入栈
void Push_SeqStack(void *stack, void *data){if (0 == stack){return;}if (0 == data){return;}struct SeqStack *s = (struct SeqStack *)stack;if (s->size == MAX){return;}s->data[s->size] = data;s->size++;
}
//出栈
void Pop_SeqStack(void *stack){if (0 == stack){return;}struct SeqStack *s = (struct SeqStack *)stack;s->size--;
}
//获得大小
int Size_SeqStack(void *stack){if (0 == stack){return -1;}struct SeqStack *s = (struct SeqStack *)stack;return s->size;
}
//获得栈顶元素
void *Top_SeqStack(void *stack){if (0 == stack){return NULL;}struct SeqStack *s = (struct SeqStack *)stack;return s->data[s->size - 1];
}
//销毁栈
void Destroy_SeqStack(void *stack){if (0 == stack){return;}free(stack);
}

测试函数:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"SeqStack.h"int IsLeft(char ch){return ch == '(';
}int IsRight(char ch){return ch == ')';
}void printError(const char *str,const char *errMsg, const char * p){printf("Error:%s\n",errMsg);printf("%s\n",str);int len = p - str;for (int i = 0; i < len; i ++){printf(" ");}printf("A\n");
}void test(){const char *str = "5+)5*(6)+9/(3*1)-(1)+3()";//初始化栈void *stack = Init_SeqStack();char *p = (char *)str;while (*p != '\0'){//如果是左括号,直接入栈if (IsLeft(*p)){Push_SeqStack(stack, p);}//如果是右括号,会有两种情况出现: 1栈不为空,匹配成功,把栈中当前字符弹出//2栈不为空,右括号没有匹配左括号if (IsRight(*p)){if (Size_SeqStack(stack) > 0){Pop_SeqStack(stack);}else{printError(str, "没有匹配的左括号!", p);}}p++;}//判断栈是否为空while (Size_SeqStack(stack) > 0){//获得栈顶元素char *pChar = (char *)Top_SeqStack(stack);//弹出栈顶元素
        Pop_SeqStack(stack);//输出错误信息printError(str, "没有匹配的右括号!", pChar);}}int main(){test();system("pause");return EXIT_SUCCESS;
}

转载于:https://www.cnblogs.com/w-x-me/p/6782921.html

数据结构 栈的实例应用,括号匹配相关推荐

  1. C语言 数据结构 栈的应用(括号匹配)

    #include<stdio.h> #include<stdlib.h> #define MaxSize 10 #define true 1 #define false 0 t ...

  2. 数据结构—栈的应用(括号匹配、表达式求值、递归)

    建议将思维导图保存下来观看,或者点击这里在线观看

  3. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

    文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...

  4. c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  5. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  6. 数据结构(二)——栈及实现、括号匹配

    一.栈的概念与特点 一种特殊的线性表,它的插入和删除运算均在同一端进行.这一端被称为栈顶,另一端为栈底,插入称为进栈,删除称为出栈.有后进先出的性质.栈顶top相当于顺序表中的size,即元素个数.关 ...

  7. 利用栈进行程序的括号匹配

    利用栈进行程序的括号匹配 程序代码: /** fanchen.cpp : 定义控制台应用程序的入口点.**/#include "stdafx.h" #include <ios ...

  8. (王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀、中缀和后缀)

    前面我们就说过,栈是一种先进后出的线性表,这种先进后出的特性就决定了它在一类场合或问题中会经常被用到--递归.考研数据结构中所涉及的利用栈结构解决递归问题或者考察栈结构特性的问题主要有这么几类 括号匹 ...

  9. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

最新文章

  1. 某站点下载资源自己主动评论器
  2. 配置ssd为缓存_撕下贴牌的画皮!快速确定SSD性能等级,关键在这3步
  3. run sequence between odata request and controller init
  4. MySQL—查询某时间范围的数据
  5. loj2090. 「ZJOI2016」旅行者
  6. python中有数组吗_python里面有数组吗
  7. [转]itertools --- 为高效循环而创建迭代器的函数
  8. spring 整合struts
  9. jrtplib 编译安装配置
  10. 路由器刷机教程图解_小米路由器刷机教程
  11. 真香!java全栈工程师前景
  12. linux fdisk等命令,linux命令:fdisk(示例代码)
  13. 用matlab求二重积分
  14. 开务分布式数据库 Tracing(二)—— 源码解析
  15. js:写一个函数实现任意数组的翻转
  16. 幼儿抽象逻辑思维举例_什么是幼儿的逻辑思维能力?训练好逻辑思维,让孩子学习事半功倍...
  17. 每天3个面试题精研 - 前端 - 第4-6天
  18. (几何方面:六边形面积)编写程序,提示用户输入六边形的边长,然后输出显示它的面积。 计算六边形面积的公式是:area= s2 这里的s就是边长。下面是一个运行示例: 请输入边长:5.5
  19. 【音频特征】语音特征小结
  20. CCTV与西方媒体的区别!句句发人深思...^^

热门文章

  1. 蓝桥杯 ADV-170算法提高 数字黑洞
  2. 圆柱与平面接触宽度_圆柱滚子轴承保持架锁爪变形引起的轴承故障
  3. 局域网共享设置软件_新页软件:如何设置局域网模式
  4. 分布式跟踪系统:Zipkin
  5. 常用排序算法的Java实现 - 1
  6. CEF使用的几个注意点
  7. Windows7下搭建Eclipse+Python开发环境
  8. AS3中 用JPEGEncoder保存 摄像头拍的照片 (另有JPEGEncoder类的下载地址)
  9. DateTime 操作详解
  10. “Hello, my first blog”------第一篇博客的仪式感