利用栈实现四则运算,带负数,带括号,带小数
这利用栈实现四则运算,带负数,带括号,带小数,自己写的有问题大家纠正。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct SNode PtrToSNode;
struct SNode {
char data[1001]; / 存储元素的数组 /
int top; / 栈顶指针 /
};
typedef PtrToSNode list;
typedef struct Node PtrToSNode2;
struct Node {
double data[1001]; / 存储元素的数组 /
int top; / 栈顶指针 /
};
typedef PtrToSNode2 list2;
void push(list s,char c){
s->data[++s->top]=c;
}
void push2(list2 s,double x){
s->data[++s->top]=x;
}
char pop(list s){
return s->data[s->top–];
}
double pop2(list2 s){
return s->data[s->top–];
}
double yun(char s){
double l;
char c;
double x1,x2;
int k=0;
double x;
int o=-1;
list q;
list2 p;
int flag=1;
q=(list)malloc(sizeof(struct SNode));
p=(list2)malloc(sizeof(struct Node));
q->top=-1;
p->top=-1;
while(s[k]!=’\0’){
if(s[k]>=‘0’&&s[k]<=‘9’){
push2(p,(double)(s[k]-‘0’));
k++;
while(s[k]>=‘0’&&s[k]<=‘9’){
push2(p,pop2§10+(double)(s[k]-‘0’));
k++;
}
}
else if(s[k]’.’){
k++;
x=0;
o=-1;
while(s[k]>=‘0’&&s[k]<=‘9’){
x=x+(s[k]-‘0’)*pow(10,o–);
k++;
}
push2(p,pop2§+x);
}
else if(s[k]’(’){
push(q,s[k]);
k++;
}
else if(s[k]’+’||s[k]’-’){
if(s[k-1]’+’||s[k-1]’-’||s[k-1]==’’||s[k-1]’/’||s[k-1]’(’){
if(s[k]’-’){
k++;
if(s[k]>=‘0’&&s[k]<=‘9’){
push2(p,(double)(s[k]-‘0’));
k++;
while(s[k]>=‘0’&&s[k]<=‘9’){
push2(p,pop2§*10+(double)(s[k]-‘0’));
k++;
}
}
if(s[k]!=’.’){
push2(p,-pop2§);
}
if(s[k]’.’){
k++;
x=0;
o=-1;
while(s[k]>=‘0’&&s[k]<=‘9’){
x=x+(s[k]-‘0’)pow(10,o–);
k++;
}
push2(p,-(pop2§+x));
}
}
else
k++;
}
else {
while(q->top!=-1&&q->data[q->top]!=’(’){
c=pop(q);
x2=pop2§;
x1=pop2§;
switch©{
case’+’:push2(p,x1+x2);break;
case’-’:push2(p,x1-x2);break;
case’’:push2(p,x1x2);break;
case’/’:push2(p,x1/x2);break;
}
}
push(q,s[k]);
k++;
}
}
else if(s[k]==’’||s[k]’/’){
while(q->data[q->top]’’||q->data[q->top]’/’){
c=pop(q);
x2=pop2§;
x1=pop2§;
switch©{
case’+’:push2(p,x1+x2);break;
case’-’:push2(p,x1-x2);break;
case’’:push2(p,x1x2);break;
case’/’:push2(p,x1/x2);break;
}
}
push(q,s[k]);
k++;
}
else if(s[k]’)’){
while(q->data[q->top]!=’(’){
c=pop(q);
x2=pop2§;
x1=pop2§;
switch©{
case’+’:push2(p,x1+x2);break;
case’-’:push2(p,x1-x2);break;
case’’:push2(p,x1x2);break;
case’/’:push2(p,x1/x2);break;
}
}
pop(q);
k++;
}
}
while(q->top!=-1){
c=pop(q);
x2=pop2§;
x1=pop2§;
switch©{
case’+’:push2(p,x1+x2);break;
case’-’:push2(p,x1-x2);break;
case’’:push2(p,x1x2);break;
case’/’:push2(p,x1/x2);break;
}
}
return pop2§;
}
int main(){
char a[100][100];
int i=0;
scanf("%s\n",a[i]);
i++;
i=0;
while(a[i][0]!=’=’){
scanf("%s",a[++i]);
}
double daan;
for(int j=0;j<i;j++){
daan=yun(a[j]);
printf("%.1f\n",daan);
}
return 0;
}
利用栈实现四则运算,带负数,带括号,带小数相关推荐
- c语言利用栈实现四则运算(包括括号小数),DataStructure_1用栈实现四则运算(c语言)...
有一句计算机界中的至理名言: 程序=数据结构+算法 可见数据结构是多么地重要啊......呵呵 今天开始复习了一下数据结构 , 解决了以前的一个问题: 用栈这个数据结构实现四则运算 算法思想是借鉴了& ...
- 数据结构算法之通过栈实现四则运算
栈是我目前学到的感觉最简单的一种数据结构,它就是一个有限制性的链表,进栈的一段我们称之为top,出栈的一头我们称之为栈顶base,如下图 它的基本结构形式是的一个栈顶指针,还有一个栈底指. typed ...
- 手把手带你利用栈来实现一个简易版本的计算器
手把手带你利用栈来实现一个简易版本的计算器 什么是栈 栈的实现 通过数组实现 通过队列实现 实现思路 栈的经典应用场景 浏览器前进后退 括号配对 leetcode 20 题 表达式求值 leetcod ...
- 负数显示红字html语言,需要将单元格内的负数显示为红色且不带负号显示两位小数的格式代码是下面哪一种A、 0.00;[红色...
需要将单元格内的负数显示为红色且不带负号显示两位小数的格式代码是下面哪一种A. 0.00;[红色 更多相关问题 SPEC性能测试能比时钟频率更全面地反映计算机处理器.存储结构和编译器的性能.它有两种表 ...
- 利用栈进行程序的括号匹配
利用栈进行程序的括号匹配 程序代码: /** fanchen.cpp : 定义控制台应用程序的入口点.**/#include "stdafx.h" #include <ios ...
- python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...
算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...
- 完成简单的四则运算(包含小括号)(栈)
设计目标:借用栈的特性(后进后出),可将先进入的数据进行暂时存储,在得到运算符后进行运算. 考虑因素:因为四则运算中既包含一级运算也包含二级运算(优先级高),所以需对这两种情况进行不同的区分,此外对于 ...
- java 子集_java – 带负数的子集和
所以我有一个给定的C个n个正整数(c_1,-,c_n).任务是找到C的两个子集A和B,其中A仅包含正数,B仅包含C中数字的负数.然后,两个子集A和B的总和应总和为数d(d永远是积极的).我需要找出是否 ...
- 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd和YYYY-mm-dd HH:mm:ss...
/*** 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较* @param higDate 减数* @param lowDate 被减数* @returns 差值天数 格式不正 ...
最新文章
- Cacti Weathermap 高级用法 (二)
- python词频云图_python安娜卡列妮娜词云图制作
- java commons.util_Java — CommonUtil
- epon matlab仿真,一种新型的EPON保护结构
- R语言入门2---R语言基础绘图
- php在数据流(内存)中操纵远程数据
- 给windows 98 客户虚拟机安装VMWare tools
- HTTP,TCP, socket,RPC 与gRPC都是啥?
- OSPF区域间路由计算规则与实验
- Page.Validate()方法
- JAVA实现邮件发送
- idea中从外部复制内容到里面不成功
- 正运动技术CAD导图软件配合控制器的使用方法
- python实现——40W告警日志分析(上)
- 开发谷歌浏览器翻译插件
- 1.5_全网最全 Windows Java IDE 环境 MyEclipse 10 安装过程和 cracker 以及 cracker 失败或者过期处理还有如何配置界面和使用中文包!
- java 生僻字 问号_csv导出姓名生僻字变问号
- ROS生成弓字形覆盖路径点逻辑分析
- 计算机软硬件问题及解决方法(经验篇)
- 详谈外部H5页面跳转微信一键关注微信公众号的方案