【C语言】表达式求值问题,应用“栈”编写一个计算器 160C

【C语言】表达式求值问题,应用“栈”编写一个计算器,要求:
a)支持整数(长整型范围内)四则混合运算;
b)输入应是中缀表达式,对不合法的输入应有提示;
c)能够输出正确计算结果;
d)示例如输入5*(10-3)/7 ,输出结果5

0

6个回答

1
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复phenix2009: 对啊,是你先回答的。
一年多之前 回复
phenix2009
白色一大坨 回复caozhy: 明明是我先的,贴代码也好,回答也好
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 顺便说下,虽然那个问题lz没有要求括号,但是我的程序是支持括号的。具体看里面源代码。
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复showbo: 可爱的bobo
一年多之前 回复
showbo
支付宝加好友偷能量挖 正解。。
一年多之前 回复

我有现成程序,你试试:

 #include<ctype.h>  
#include<stdlib.h>  
#define stacksize 30  
#define stackincrease 30  
#define maxvalume 30  
#define expvalume 200  
#define title "------------------------------Life is a fight!------------------------------------"  

typedef float Elemtype;

typedef struct STACK{
    Elemtype* top;
    Elemtype* base;
    int len;
} stack;

stack* InitStack()
{
    Elemtype* t;
    stack* s;
    t = (Elemtype*)malloc(stacksize*sizeof(Elemtype));
    s = (stack*)malloc(sizeof(stack));
    s->top = t;
    s->base = t;
    s->len = stacksize;
    return s;
}

void PushStack(stack *s, Elemtype d)
{
    if (s->top - s->base >= s->len - 1)
        s->base = (Elemtype*)realloc(s->base, (s->len + stackincrease)*sizeof(Elemtype));
    *s->top = d;
    s->top++;
}

void PopStack(stack* s, Elemtype* d)
{
    if (s->top == s->base)
    {
        printf("\nErr!\n");
        return;
    }
    *d = *--(s->top);
}

int LengthStack(stack *s)
{
    return (s->top - s->base);
}

int GetExp(Elemtype* str)
{
    char c;
    int i = 0;
    fflush(stdin);
    scanf("%c", &c);
    while (c != '\n')
    {
        if (i > expvalume)
        {
            printf("Err: The expression is too long!\n");
            return -1;
        }
        *str++ = c;
        i++;
        scanf("%c", &c);
    }
    if (i == 0)
    {
        *str++ = '#';
    }
    *str = '\0';
    return i;
}

void NiftoSuf(Elemtype* nif, Elemtype* suf)
{
    int i, j, n;
    Elemtype c, t;
    stack *s;

    i = 0;
    j = 0;
    s = InitStack();
    c = nif[i];
    while (c != '#')
    {
        while (isdigit(c) || c == '.')
        {
            suf[j++] = c;
            c = (char)nif[++i];
            if ((c<'0' || c>'9') && c != '.')
            {
                suf[j++] = ' ';
            }
            suf[j] = '\0';
        }
        if (c == ')')
        {
            PopStack(s, &t);
            while (t != '(')
            {
                suf[j++] = t;
                suf[j++] = ' ';
                PopStack(s, &t);
            }
            suf[j] = '\0';
        }
        else if (c == '(')
            PushStack(s, c);
        else if (c == '+' || c == '-')
        {
            if (!LengthStack(s))
            {
                PushStack(s, c);
            }
            else
            {
                do{
                    PopStack(s, &t);
                    if (t == '(')
                    {
                        PushStack(s, t);
                    }
                    else
                    {
                        suf[j++] = t;
                        suf[j++] = ' ';
                        suf[j] = '\0';
                    }
                } while (LengthStack(s) && t != '('&&c != '(');
                PushStack(s, c);
            }
        }
        else if (c == '*' || c == '/' || c == '(')
        {
            PushStack(s, c);
        }
        else if (c == '#')
        {
            while (LengthStack(s))
            {
                PopStack(s, &t);
                suf[j++] = t;
                suf[j++] = ' ';
            }
            break;
        }
        else
        {
            printf("\nErr:Expression Error\n");
            return;
        }
        i++;
        c = nif[i];
    }
    if (c == '#')
    while (LengthStack(s))
    {
        PopStack(s, &t);
        suf[j++] = t;
        suf[j++] = ' ';
    }
    suf[j++] = '#';
    suf[j] = '\0';
    free(s);
}

Elemtype Cal(Elemtype* suf)
{
    int i, j;
    char c;
    Elemtype f, r, d1, d2;
    stack *s;

    i = 0;
    j = 0;
    s = InitStack();
    char t[maxvalume];
    c = suf[j++];
    while (c != '#')
    {
        while (isdigit(c) || c == '.')
        {
            if (i > maxvalume)
            {
                printf("Err: The data is too large!\n");
                return -1;
            }
            t[i++] = c;
            t[i] = '\0';
            c = suf[j++];
            if (c == ' ')
            {
                f = atof(t);
                PushStack(s, f);
                i = 0;
            }
        }
        switch (c){
        case '+':
            PopStack(s, &d2);
            PopStack(s, &d1);
            PushStack(s, d1 + d2);
            break;
        case '-':
            PopStack(s, &d2);
            PopStack(s, &d1);
            PushStack(s, d1 - d2);
            break;
        case '*':
            PopStack(s, &d2);
            PopStack(s, &d1);
            PushStack(s, d1*d2);
            break;
        case '/':
            PopStack(s, &d2);
            if (d2 == 0)
            {
                printf("Err: data error!\n");
                return  -1;
            }
            PopStack(s, &d1);
            PushStack(s, d1 / d2);
            break;
        }
        c = suf[j++];
    }
    PopStack(s, &r);
    printf("Result: %f", r);
    free(s);
    return r;
}

int main(void)
{
    int i, j, k;
    char c, c1, y;
    Elemtype nif[expvalume], suf[expvalume];
    printf("%s\n\n", title);

    do{
        i = 0;
        j = 0;
        k = 0;
        printf("Please enter the expression:\n");
        GetExp(nif);
        NiftoSuf(nif, suf);
        printf("\n");
        while (suf[k] != '\0')
        {
            c1 = suf[k];
            printf("%c", c1);
            k++;
        }
        printf("\n\n");
        Cal(suf);
        printf("\n\n\n");
        printf("\nPlease enter 'Y' for continual\n");
        scanf("%c", &y);
        printf("\n");
        fflush(stdin);
    } while (y == 'Y' || y == 'y');
    return 0;
}
0
phenix2009
白色一大坨 回复qq_42054115: 你试一下下面的版本,我加上了格式的校验
一年多之前 回复
phenix2009
白色一大坨 回复qq_42054115: #include <stdio.h>
一年多之前 回复
qq_42054115
酸菜鱼爱吃柿子 stdin在哪定义
一年多之前 回复

运行效果如下,输入算式后用#做结尾:
图片说明

0

把算式错误判断部分完善了一下:

 #include<ctype.h>  
#include<stdlib.h>  
#define stacksize 30  
#define stackincrease 30  
#define maxvalume 30  
#define expvalume 200  
#define title "------------------------------Life is a fight!------------------------------------"  

typedef float Elemtype;

typedef struct STACK{
    Elemtype* top;
    Elemtype* base;
    int len;
} stack;

stack* InitStack()
{
    Elemtype* t;
    stack* s;
    t = (Elemtype*)malloc(stacksize*sizeof(Elemtype));
    s = (stack*)malloc(sizeof(stack));
    s->top = t;
    s->base = t;
    s->len = stacksize;
    return s;
}

void PushStack(stack *s, Elemtype d)
{
    if (s->top - s->base >= s->len - 1)
        s->base = (Elemtype*)realloc(s->base, (s->len + stackincrease)*sizeof(Elemtype));
    *s->top = d;
    s->top++;
}

void PopStack(stack* s, Elemtype* d)
{
    if (s->top == s->base)
    {
        printf("\nErr!\n");
        return;
    }
    *d = *--(s->top);
}

int LengthStack(stack *s)
{
    return (s->top - s->base);
}

int GetExp(Elemtype* str)
{
    char c;
    int i = 0;
    fflush(stdin);
    scanf("%c", &c);
    while (c != '\n')
    {
        if (i > expvalume)
        {
            printf("Err: The expression is too long!\n");
            return -1;
        }
        *str++ = c;
        i++;
        scanf("%c", &c);
    }
    if (i == 0)
    {
        *str++ = '#';
    }
    *str = '\0';
    return i;
}

int NiftoSuf(Elemtype* nif, Elemtype* suf)
{
    int i, j, n;
    Elemtype c, t;
    stack *s;

    i = 0;
    j = 0;
    s = InitStack();
    c = nif[i];
    while (c != '#')
    {
        while (isdigit(c) || c == '.')
        {
            suf[j++] = c;
            c = (char)nif[++i];
            if ((c<'0' || c>'9') && c != '.')
            {
                suf[j++] = ' ';
            }
            suf[j] = '\0';
        }
        if (c == ')')
        {
            PopStack(s, &t);
            while (t != '(')
            {
                suf[j++] = t;
                suf[j++] = ' ';
                PopStack(s, &t);
            }
            suf[j] = '\0';
        }
        else if (c == '(')
            PushStack(s, c);
        else if (c == '+' || c == '-')
        {
            if (!LengthStack(s))
            {
                PushStack(s, c);
            }
            else
            {
                do{
                    PopStack(s, &t);
                    if (t == '(')
                    {
                        PushStack(s, t);
                    }
                    else
                    {
                        suf[j++] = t;
                        suf[j++] = ' ';
                        suf[j] = '\0';
                    }
                } while (LengthStack(s) && t != '('&&c != '(');
                PushStack(s, c);
            }
        }
        else if (c == '*' || c == '/' || c == '(')
        {
            PushStack(s, c);
        }
        else if (c == '#')
        {
            while (LengthStack(s))
            {
                PopStack(s, &t);
                suf[j++] = t;
                suf[j++] = ' ';
            }
            break;
        }
        else
        {
            printf("\nErr:Expression Error\n");
            return -1;
        }
        i++;
        c = nif[i];
    }
    if (c == '#')
    while (LengthStack(s))
    {
        PopStack(s, &t);
        suf[j++] = t;
        suf[j++] = ' ';
    }
    suf[j++] = '#';
    suf[j] = '\0';
    free(s);

    return 0;
}

Elemtype Cal(Elemtype* suf)
{
    int i, j;
    char c;
    Elemtype f, r, d1, d2;
    stack *s;

    i = 0;
    j = 0;
    s = InitStack();
    char t[maxvalume];
    c = suf[j++];
    while (c != '#')
    {
        while (isdigit(c) || c == '.')
        {
            if (i > maxvalume)
            {
                printf("Err: The data is too large!\n");
                return -1;
            }
            t[i++] = c;
            t[i] = '\0';
            c = suf[j++];
            if (c == ' ')
            {
                f = atof(t);
                PushStack(s, f);
                i = 0;
            }
        }
        switch (c){
        case '+':
            PopStack(s, &d2);
            PopStack(s, &d1);
            PushStack(s, d1 + d2);
            break;
        case '-':
            PopStack(s, &d2);
            PopStack(s, &d1);
            PushStack(s, d1 - d2);
            break;
        case '*':
            PopStack(s, &d2);
            PopStack(s, &d1);
            PushStack(s, d1*d2);
            break;
        case '/':
            PopStack(s, &d2);
            if (d2 == 0)
            {
                printf("Err: data error!\n");
                return  -1;
            }
            PopStack(s, &d1);
            PushStack(s, d1 / d2);
            break;
        }
        c = suf[j++];
    }
    PopStack(s, &r);
    printf("Result: %f", r);
    free(s);
    return r;
}

int main(void)
{
    int i, j, k;
    char c, c1, y;
    Elemtype nif[expvalume], suf[expvalume];
    printf("%s\n\n", title);

    do{
        i = 0;
        j = 0;
        k = 0;
        printf("Please enter the expression:\n");
        GetExp(nif);


        int nRet = NiftoSuf(nif, suf);
        if (nRet == -1) break;
        printf("\n");
        while (suf[k] != '\0')
        {
            c1 = suf[k];
            printf("%c", c1);
            k++;
        }
        printf("\n\n");
        Cal(suf);
        printf("\n\n\n");
        printf("\nPlease enter 'Y' for continual\n");
        scanf("%c", &y);
        printf("\n");
        fflush(stdin);
    } while (y == 'Y' || y == 'y');

    system("pause");
    return 0;
}
0
phenix2009
白色一大坨 回复qq_42054115: #include <stdio.h>
一年多之前 回复
qq_42054115
酸菜鱼爱吃柿子 stdin在哪定义
一年多之前 回复

头文件就这些,因为是试验程序,里面肯定有些没用到的:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include<iostream>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
#include<ctype.h>  
using   namespace   std;
0

https://download.csdn.net/download/caozhy/10191105 这里有完整的代码项目文件,到手即用,所见即所得。

采纳本回答,可以按照你的要求定制,另外送你1000个c语言例子+vc++源代码大全+mfc源代码。
https://download.csdn.net/download/caozhy/1899674
https://download.csdn.net/download/caozhy/9918664
https://download.csdn.net/download/caozhy/9918723
以上资源均为本人上传,可放心。

0
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复phenix2009: 首先,回答问题要抱着一颗自愿无偿帮助人家的心。所以,我能回答的尽量回答。至于能采纳的题主毕竟是少数,为了感谢他们高尚的品德,我们可以更多地帮助他们。
一年多之前 回复
phenix2009
白色一大坨 回复caozhy: 问一下大佬,这种不接帖的人,是不是不用交出分数,可以白套程序?
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复phenix2009: 没注意看,但是这个问题的确是今天上午所有问题中我唯一会的。
一年多之前 回复
phenix2009
白色一大坨 回复caozhy: 大佬你这么多分了还来跟我抢c币[○・`Д´・ ○]
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 如果你需要别的资源(本人的资源无限制,他人的资源160分以内),我也可以帮你代下。本人有4万多分,实力保证。
一年多之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 上面一个链接是vb的,错了,是这个 https://download.csdn.net/download/caozhy/9918854
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言表达式求值对于栈的应用
数据结果,C语言表达式求值,堆栈经典应用。输入表达式,如1+2*3,输出运算后的值。
数据结构——栈的应用(表达式求值)(C语言)
char Precede(char t1, char t2)函数用于输出t1,t2两个运算符的优先级(t1为先出现的运算符(已经压入栈OPTR中),t2为后出现的运算符)char Precede(char t1, char t2){ int i,j; char pre[][7]={ //运算符之间的优先级制作成一张表格 {'>
[栈] 表达式求值-C语言-多位数求值
【理论】https://blog.csdn.net/summer_dew/article/details/82048387 【代码说明】支持:2位以上的数字,四则运算和幂运算 使用的栈,是自己实现,封装在2 SqStack.h文件中的,可自己实现,也可以参照:https://blog.csdn.net/summer_dew/article/details/82051767 【结果】 测试:...
C语言编写的表达式求值
C语言编写的表达式求值,可进行加减乘除运算,及优先级运算
表达式求值(c语言编写)
利用栈进行表达式求值,输入表达式,转化为后缀式再进行求值运算
栈的应用——表达式求值
一、从原表达式求得后缀式 表达式存放在字符型数组str中,其后缀表达式存放在字符型数组exp中,转换过程中用一个字符型数组op作为栈。依次处理字符串str中的每个字符ch,对于每一个ch: (1)若ch为数字,将其存放在exp中。 (2)若ch为左括弧“(”,将其压栈。 (3)若ch为右括弧“)”,将栈op中“(”上面的操作符出栈并依次存入exp中,然后“(”出栈。 (4)若ch...
表达式求值-栈的应用
自己练练手,写了个栈用来进行表达式求值。 记录一下~(用‘#’表示开始结束~) 不过可能也存在着一些问题,就是用double存整数可能会出现问题,另外异常处理还没有完善。 还存在很大优化空间。 #include &amp;lt;iostream&amp;gt; #include &amp;lt;sys/malloc.h&amp;gt; //win上为malloc.h #include &amp;lt;cmath&amp;gt; us...
【栈的应用】表达式求值
表达式求值
栈的应用 表达式求值
后天考概率论了  Σ(|||▽||| )                     ,而我还在这找bug,   ≥﹏≤  好在是最后终于成功了 啊哈哈哈!!! 注意操作数只能是一位数哦!!!! 输入表达式时要切换成英文括号哦!!! 这里实用的栈是数组构成,就不像书上那样什么    抽象数据类型定义了   的啦 #include using names
栈的应用:表达式求值
背景 在写这篇博客之前让我想到了一年多以前去小米面试,就是这道面试题让我挂了,后来听同事说这不就是数据结构里的例题吗,后来一看还真是,不过书里不太完整,看了几篇博客,学习了下解决方法,但是写的还是不太完美,不知道读者你有没有更优雅的代码,废话不多说开始学习吧。 介绍 栈大家都知道,一种先进后出的数据结构,可以自己使用线性表实现(数组,链表)。这篇写的是栈的应用,一般有两个,一个是迷宫问题...
栈应用--表达式求值
自定义栈结构 package cStack; public class Stack { private int defaultSize = 10; protected Object[] objs; protected int top;// top的值是下一个要入栈的元素下标 public Stack() { objs = new Object[10]; top = 0; ...
表达式求值(栈的应用)
#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #include<iostream> #include<stdlib.h> using namespace std; typedef double SElemType; ///////////////////////////////////////////////////////////////////////////////// /*以下为栈的操作*/ typedef struct SqStack //栈的顺序存储结构 { SElemType *base; SElemType *top; int stacksize; }SqStack; void InitStack (SqStack &S)//构造一个空栈 { S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));//分配储存空间 if(!S.base) exit (-1); //空间分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; //空间初始分配 }//InitStack bool GetTop (SqStack S,SElemType &e) { //若栈不空,则用e返回S的栈顶元素,并返回true;否则返回false if(S.top==S.base) return false; e=*(S.top-1); return true; }//GetTop
栈的应用-表达式求值
表达式求值
用栈的应用编一个表达式求值的程序(c语言)
用栈的应用编一个表达式求值的程序(c语言)
一个表达式求值计算器
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Reflection;using System.Text;/// &amp;lt;summary&amp;gt;/// &amp;lt;para&amp;gt;Author: zhaojun zhjzhjxzhl@163.com&amp;lt;/para&amp;gt;...
c++编写的计算器 表达式求值
本文采用c++编写简单的表达式求值 并且能显示计算过程以字符串方式输入一个复杂的表达式; 表达式中包括:数值(整数、实数)、一般运算符(正号,负号,加、减、乘、除、求模、乘方、括号); 如输入: “123*(45.7/25-20^3+12.4*(123%4))” 2) 利用栈,根据各运算符的优先度进行数值计算,显示结果 3) 循环回1),继续下个表达式的输入。
011.栈应用表达式求值C实例
栈应用表达式求值
表达式求值(c语言实现--基于栈)
数据结构的高级运用,主要是栈的运用!这个是清华大学数据结构书上的题,将算法改成了c函数,或许对你有点用!调试过的运用程序也在,其中有点小问题希望高人指点!
C语言 栈系列 四则运算表达式求值
C语言 栈系列–&gt;四则运算表达式求值 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;ctype.h&gt; #define ERROR 0 #define OK 1 typedef struct Stack {//建立一个 Stack 结构体 int *elements;//元素指针 in...
C语言数据结构上栈的表达式求值
数据结构运用栈的知识编程求解表达式的值,是依照清华大学的书写的,能进行小数的运算
栈实现表达式求值(C语言)
刚刚学习C语言的时候很多人就写过计算器,但是当时写的计算器只能进行一步四则运算;对于一次输入(1+2)*3+4这样的运算则没有办法计算。 本篇博文利用栈这种数据结构实现了支持带括号的表达式求值计算器;栈有栈底和栈顶指针,元素是先进后出;对于栈的操作最主要的是创建、压栈、弹栈;在实现计算器时,我们输入的表达式叫做中缀表达式,我们需要将其转为后缀表达式;然后利用后缀表达式求取表达式的值;
栈的测试--四则运算表达式求值(C语言)
通过学习《大话数据结构》,练习对栈的使用,此测试是四则运算表达式求值。
c语言栈实现表达式求值
算术四则运算规则 先乘除,后加减 从左算到右 先括号内后括号外 表达式组成任何一个表达式都有操作数、运算符和界定符组成。操作数即可以是常量,也可以是被说明为变量或常量的标识符。运算符可以分为算术运算,关系运算和逻辑运算符。界定符有左右括号和结束符等。若把运算符和界定符统称为算符,他们构成的集合命名为OP.则任意两个相继出现的算符a和b之间的有限关系至多是下面的三种之一: a < b   a的优先权高
用栈实现表达式求值(C语言)
例如:求算式3*(7-2)的值。也许对高手来说这是易如反掌的事。但是,我却苦思冥想好几天,依然一筹莫展,悲剧!如果能给我一个算法提示,我感激不尽~
表达式求值(C语言栈实现)
表达式求值(C语言栈实现).已测试,没有任何错误和警告
表达式求值(C语言栈)数据结构
数据结构实验----表达式求值C语言版。利用堆栈,解决了只能计算一位数的bug。内含实验报告,以供参考。欢迎下载。呵呵 frcsun@gmail.com
C语言的基于栈实现的表达式求值
一、目的 理解中缀表达式求值的过程 理解中缀转后缀表达式求值的过程 掌握堆栈的应用 二、问题描述 缀表达式,其中包含括号,加减乘除,乘方等运算,利用中缀表达式,对表达式分析并求值 入的中缀表达式转换为后缀形式,显示后缀形式,并通过后缀形式求值 三、数据结构 //运算符结构体 typedef struct { char OPname; //存...
表达式求值 数据结构 栈的应用
用栈实现各种双操作数操作符的运算 主要用c/c++语言实现
简单栈应用-表达式求值
#include<iostream> #include<string> #include<stack> using namespace std;const int MAX_SIZE = 100; //栈 stack<int>OPND;//数据栈 stack<int>OPTR;//操作栈 char q[7]={'+','-','*','/','(',')','='};//操作符 char p[7][7
栈的应用-四则运算表达式求值
Java实现四则运算表达式求值前言最近在复习数据结构与算法,在栈的应用中了解到计算机计算四则运算表达式的算法。计算机计算四则运算主要分两步: 将中缀表达式转化为后缀表达式; 将后缀表达式进行运算得出结果。 后缀(逆波兰)表达式后缀表达式是一种不包含括号,运算符放在两个运算对象的后面的表示法,比如四则运算表达式9+(3-1)*3+10/2,其后缀表达式为9 3 1 - 3 * + 10 2 / +。
栈的应用——四则运算表达式求值
1:后缀表示法定义 所有的符号都是在要运算数字的后面出现。 如:9+(3-1)*3+10/2的后缀表示法应该是9 3 1-3*+10 2/+2:后缀表达式计算结果 规则:从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到是符号,就将处于栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。以9 3 1-3*+10 2/+为例 1:初始化一个空栈。 2:表达式中前三个都是数字,所
栈的应用1-表达式求值
数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第3部分栈和队列,介绍在系统软件和应用软件开发中大有用途的两种特殊线性表——栈和队列的构组成、存储结构的选择,以及基本运算的实现,通过相关的应用案例介绍了这些数据结构的应用方法。
栈的应用-表达式求值-数据结构
栈的应用之一,表达式求值,严慧敏书上给的例子是只有1位数的输入,这里稍微改下,处理下多位数的+、-、*、/。 表达式要求输入合法,且除数要能整除,不然就int掉,算出来错了,主要就是书中优先级表的应用。 省去那些STATUS的返回,什么ERROR  OK  OVERFLOW 的。 完整代码: #include #include #include #define InitStackSize
栈的应用:四则运算表达式求值
栈的特点栈是计算机中非常基础而又极其重要的一种数据结构,许多算法的实现都离不开栈,它的特点是“先进后出”,也可以说“后进先出”。 打一个形象的比方:栈好比一个弹夹,最先放入的子弹只能最后打出;而最后放入的子弹则最先打出。
栈在表达式求值中的应用
首先我们使用java来实现栈ADT,这里不使用java提供的Stack类, 而是使用ArrayList来实现,具体看代码:public class MyStack { public ArrayList<String> stack = new ArrayList<String>(); public String pop() { int index = stack.
栈的应用_简单表达式求值
#include "sqstack.cpp" #include "sqstack1.cpp" #include void trans(char *exp,char postexp[])     //把表达式exp转化为后缀表达式postexp { char e; SqStack *Optr; InitStack(Optr); int i=0; while(*exp!='\0')
数据结构之栈的应用——表达式求值
数据结构之栈的应用——表达式求值
栈的表达式求值应用,中缀转后缀
程序可以运行,但实现不了表达式求值的功能,问题出在哪里?![图片](https://img-ask.csdn.net/upload/201606/24/1466709674_502372.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709601_14232.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709692_513062.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709703_476666.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709712_590337.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709737_36586.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709655_781899.jpg)![图片](https://img-ask.csdn.net/upload/201606/24/1466709741_731845.jpg)
栈的应用——运算表达式求值
我们来看一个栈比较常见的应用:数学表达式的求值。对于任意一个四则运算表达式,比如“9+(5-1)*3+8/2”。我们采用“从左到右,先乘除,后加减,先括号内,后括号外”的原则,口算就可以得出结果,但是计算机是如果算出它的值呢?后缀(逆波兰)表达式逆波兰表示法(RPN),是一种由波兰数学家Jan Łukasiewicz 1920年引入的数学表达式,在RPN中,所有操作符置于操作数的后面,因此也被称为...
C语言编写的表达式求值 用栈实现
自己编写的  可能代码有点冗余  欢迎大家提意见
相关热词 c# 线程顺序 c#昨天当前时间 c# 多进程 锁 c#mysql图片存取 c# ocx 委托事件 c# 读取类的属性和值 c# out 使用限制 c#获取url的id c#怎么进行分页查询 c# update 集合

相似问题

1
ball ball各位大佬,C语言中序表达式树求值问题
0
c语言进行复杂表达式的计算
1
C语言四则运算计算器的一个问题
1
如何使用C语言实现逆波兰运算(加减乘除)求值?
3
关于嵌入式操作系统的一个题目,编写一个c语言程序,其功能是将一个文本文件读出,然后再反序写回。
0
表达式计算,求出相等的表达式构成的等式,采用C语言实现计算
1
表达式解析前缀表达式再计算表达式的值,这个用C语言来实现的方式?
0
一个有关于多项式表达式的计算的问题,多项式表达式求值用C语言做
0
怎么解决这个jasvascrpt表达式计算的问题
0
一个表达式的优先级方面的计算的问题,算法问题采用C语言计算的方式是什么
0
前缀表达式的计算问题,单个符号,输出结果,使用C语言计算
0
跪求大佬帮忙看一下表达式求解问题
2
C语言数学表达式求大神解答
0
用罗马数字构成的表达式的计算问题,怎么采用C语言程序的设计的思路来实现
1
C语言设计简单计算问题
1
使用C语言进行一个月份的问题解决
0
表达式的转换和解析的问题,怎么利用C语言的算法的思维方式来实现的代码编写
0
表达式的计算的问题怎么实现,运用C语言的程序的设计的思路的实现
0
表达式公式的一个计算的问题,如何利用C语言的程序的设计的方式来实现表达式的?
1
(c语言)编写一个函数,由实参传来一个矩阵 A[M][N],按列输出它每一列上最大值和最小值 的差