栈和队列的应用-计算器实例

‘’‘
(11 + 3)× 2 -5
顺序存储栈来实现
’‘’
sqstack.h

#ifndef SQSTACK_H__
#define SQSTACK_H__
#define MAXSIZE	 32	
typedef int datatype typedef struct node_st 
{datatype data[MAXSIZE];	int top;}sqstack;sqstack *st_create(void);
int st_isempty(sqstack *);
int st_push(sqstack *,datatype *);
int st_pop(sqstack *,datatype *);
int st_top(sqstack *,datatype *);
void st_travel(sqstack *);
void st_destory(sqstack *);#endif

sqstack.c

#include<stdio.h>
#include<stdlib.h>#include"sqstack.h"sqstack *st_create(void)
{sqstack *st;st = malloc(sizeof(*st));if(st == NULL)return NULL;st->top = -1;return st;
}int st_isempty(sqstack *st)
{return (st->top == -1);
}int st_push(sqstack *st,datatype *data)
{if(st->top == MAXSIZE -1)return -1;st->data[++st->top] = *data;return 0;
}int st_pop(sqstack *st,datatype *data)
{if(st_isempty(st))return -1;*data = st->data[st->top--];return 0;}int st_top(sqstack *st,datatype *data)
{if(st_isempty(st))return -1;*data = st->data[st->top];return 0;
}void st_travel(sqstack *st)
{	int i;if(st_isempty(st))return ;for(i = 0; i < st->top;i++)printf("%d ",st->data[i]);printf("\n");
}void st_destory(sqstack *st)
{free(st);
}

main.c

#include<stdio.h>
#include<stdlib.h>#include"sqstack.h"void compute(sqsatck *snum,datatype *op)
{datatype n1,n2,n;st_pop(snum,&n2);st_pop(snum,&n1);switch(*op){	case '+':n = n1+n2;break;case '-':n = n1-n2;break;case '*':n = n1*n2;break;case '/':n = n1/n2;break;default:exit(1);}st_push(snum,&n);}
static void deal_bracket(sqstack *snum,sqstack *sop)
{datatype old_op;st_top(sop,&old_op);while(old_op != '('){st_pop(sop,&old_op);compute(snum,&old_op);st_top(sop,&old_op);}st_pop(sop&old_op);
}
static int get_pri(int op)
{switch(op){case '(':return 0;case '+':case '-':return 1;case '*':case '/':return 2;default:return -1;}}static void deal_op(sqstack *snum,sqstack *sop,int op)
{datatype old_op;if(st_isempty(sop) || op == '('){st_push(sop,&op);return ;}st_top(sop,&old_op);if(get_pri(op) > get_pri(old_op)){st_push(sop,&op);return ;}while(get_pri(op) <= get_pri(old_op)){st_pop(sop,&old_op);computer(snum,&old_op);if(st_isempty(sop))break;		st_top(sop,&old_op)}st_push(sop,&op);
}int main()
{int i =0;char str[]="(11+3)*2-5";sqstack *snum,*sop;int value = 0;int flag = 0;snum = st_create();if(sum == NULL)exit(1);sop = st_create();if(sop == NULL)exit(1);while(str[i] != '\0'){if(str[i] > '0' && str[i] < '9'){value = value *10 + (str[i] - '0');flag = 1;}else{if(flag){st_push(snum,&value);flag = 0;value = 0;}if(str[i] == ')'){deal_bracket(snum,sop);}else{deal_op(snum,sop,str[i]);}}i++;}if(flag)st_push(snum,&value);while(!st_isempty(sop)){	datatype old_op;st_pop(sop,&old_op);computer(snum,&old_op);}st_travel(snum);st_destory(snum);st_destroy(sop);exit(0);
}

Makefile

all:sqstacksqstack:sqstack.o main.o$(CC) $^ -o $@clean:rm sqstack *.o -rf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闲话 .NET(5):.NET Core 有什么优势?

前言 .NET Core 并不是 .NET FrameWork 的升级版&#xff0c;它是一个为满足新一代的软件设计要求而从头重新开发的开发框架和平台&#xff0c;所以它没有 .NET FrameWork 的历史包袱&#xff0c;相对于 .NET FrameWork&#xff0c;它具备很多优势。 .NET Core 有哪些优势&am…

智算中心带宽漫谈 -- 开篇

隐秘的角落 带宽对高性能计算是一个永恒的话题&#xff0c;本质上&#xff0c;带宽即数据交换的速率&#xff0c;单位时间的传输数据越多&#xff0c;带宽就越高&#xff0c;但对高性能计算来说&#xff0c;对高带宽的渴求永无止境&#xff0c;好比宏观现实世界中的车道&#…

QT实现线程的四种方式(QThread、QRunnable和QThreadPool、QObject、QtConcurrent)

在当今高性能计算需求日益增长的背景下,多线程编程已成为提升应用性能的重要手段。Qt框架,作为一个功能全面、跨平台的C++应用程序开发工具包,为我们提供了多种多线程实现方案。本文将介绍QThread类在Qt多线程编程中的应用,以及如何通过QRunnable和QThreadPool、QObject的m…

C# GDI+ 绘制文字不同的操作系统渲染文字大小不同

一、C# GDI 绘制文字不同的操作系统渲染文字大小不同 原因&#xff1a;使用Font 字体的时候&#xff0c;没有指定字体渲染的单位。 不同系统的默认字体单位会不同。 二、解决方案&#xff1a; 在指定字体的时候&#xff0c;指定字体大小&#xff0c;同时也要设置字体的单位 …

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

springboot整合kkFileView部署,前端使用

前言&#xff1a; 官方文档&#xff1a;https://kkfileview.keking.cn/zh-cn/docs/production.html docker方式或加入星球获取发行包直接获取启动&#xff0c;无需以下步骤&#xff1a; 拉取镜像# 网络环境方便访问docker中央仓库 docker pull keking/kkfileview:4.1.0# 网…

pytest框架的代码如何用vscode进行debug

{"version": "0.2.0","configurations": [{"name": "Python: Run My Module", // 配置名称&#xff0c;将在调试配置下拉列表中显示"type": "debugpy", // 调试类型&#xff0c;这里是Python"requ…

二元关系表示

一、二元关系的定义和表示 什么是二元关系&#xff1f;对集合A和B&#xff0c;A\timesB的任意子集R为A到B的一个二元关系。当AB时&#xff0c;A\timesA的任一子集R称为A上的一个二元关系。在不引起误解的情况下&#xff0c;二元关系可简称关系。 若|A|m,|B|n&#xff0c;则A到…

常用字体映射字典

表格形式 英文字体名称中文字体名称SimSun宋体SimHei黑体KaiTi楷体FangSong仿宋YouYuan幼圆LiSu隶书NSimSun新宋体SimSun-ExtB宋体-ExtBFangSong_GB2312仿宋_GB2312KaiTi_GB2312楷体_GB2312Microsoft YaHei微软雅黑Microsoft JhengHei微软正黑体STXihei华文细黑STKaiti华文楷体…

手机版AI写作软件哪个好用?5款AI写作软件分享

在这个快节凑的时代&#xff0c;人们对于高效、便捷的创作方式很是追求。尤其是在人工智能技术发展迅速的今天&#xff0c;AI写作软件的出现&#xff0c;让很多自媒体创作者都会想到在手机上面进内容创作&#xff0c;这样不仅能提高工作效率&#xff0c;而且工作的自由度会更高…

自动化运维(AIOps): 现代IT管理的革命

在数字化时代&#xff0c;企业的 IT 系统变得愈加复杂。从云计算到大数据&#xff0c;从物联网到人工智能&#xff0c;技术的飞速发展使得企业面临前所未有的挑战。这种复杂性不仅体现在数据量和数据流的增加上&#xff0c;还包括高成本和高错误率的运维需求。在此背景下&#…

基于51单片机的盆栽自动浇花系统

一.硬件方案 工作原理是湿度传感器将采集到的数据直接传送到ADC0832的IN端作为输入的模拟信号。选用湿度传感器和AD转换&#xff0c;电路内部包含有湿度采集、AD转换、单片机译码显示等功能。单片机需要采集数据时&#xff0c;发出指令启动A/D转换器工作&#xff0c;ADC0832根…

Hive 变量定义与引用

文章目录 1.背景2.Hive 变量命名空间查看变量设置变量引用变量 参考文献 1.背景 在书写 Hive SQL 时&#xff0c;有时需要将重复出现的值从 SQL 分离出来&#xff0c;以变量的方式表示和引用。 设置变量和引用变量可以带来以下几个好处&#xff1a; 简化查询语句&#xff1a;…

Android 实现竖排文本(垂直方向显示)

Android 实现竖排文本-垂直方向显示 前言效果图代码实现方式一 Custom View1. 自定义视图 VerticalTextView2. 在xml布局文件中使用3. 设置文本内容 方式二 使用 TextView 的 rotation属性方式三 使用带有跨距文本的TextView1. 自定义视图 VerticalTextView2. 在xml布局文件中使…

AI学习指南数学工具篇-凸优化基础知识凸函数

AI学习指南数学工具篇-凸优化基础知识凸函数 引言 在凸优化过程中&#xff0c;凸函数是一个非常重要的概念&#xff0c;它在机器学习、深度学习和优化算法中都有广泛的应用。凸函数具有很多独特的性质&#xff0c;能够帮助我们更好地理解优化问题并且设计高效的优化算法。本文…

【Golang】Golang获取Gin框架PostForm上传的文件

文章目录 前言一、函数解释二、代码实现三、总结 前言 在Web开发中&#xff0c;文件上传是一项常见的功能。例如&#xff0c;用户可能需要上传头像、文档或其他类型的文件。在Go语言的Gin框架中&#xff0c;我们可以很方便地处理文件上传。在这篇博客中&#xff0c;我将解释如…

怎样理解 Vue 的单项数据流

Vue 的单项数据流是一个核心概念&#xff0c;它指的是在 Vue 组件中&#xff0c;数据的流动方向是单向的&#xff0c;从父组件流向子组件。以下是关于 Vue 单项数据流的详细理解&#xff1a; 数据流的方向&#xff1a; Vue 中的数据流动是单向的&#xff0c;即数据只能从父组件…

中国交通信息科技集团有限公司(中交信科)java开发工程师-机试题目/颂大技术面试总结/理工数传 软件开发一面二面面试总结/武汉智能视觉信息技术有限公司/高级

武汉智能视觉信息技术有限公司/高级 如果解决jvm内存溢出如果解决亿级别的数据导出&#xff0c;有没有其他的方案可以解决呢索引的原理工作中用了哪些索引提高了多少的速度线程池的创建方法--解释new ThreadPool的其他参数以及四大拒绝策略分布式使用用到了哪些模式xxl-job的原…

pillow学习4

ImageChops 模块 在 Pillow 库的内置模块 ImageChops 中包含了多个用于实现图片合成的函数。这些合成 功能是通过计算通道中像素值的方式来实现的。其主要用于制作特效、合成图片等操作。 常用的内置函数如下所示&#xff1a; &#xff08;1&#xff09;相加函数 add()&#xf…

【Windows系统】解决Intel 6代CPU安装win7系统过程中无法操作键盘鼠标的问题

问题 微软表示&#xff0c;从 2016 年 7 月 17 日起&#xff0c;新的 Intel、AMD 和Qualcomm 处理器将仅支持 Windows 10&#xff0c;不再支持 Windows 7 和 8.1。因此&#xff0c;Intel 6代以后的CPU因为没有USB驱动无法完成win7系统的安装。 下文核心思想是通过老毛桃PE系统…