#include<stdio.h>
#include<stdlib.h> typedef char datatype;
typedef struct stack
{
int top; /*栈顶指针*/
datatype* data; /*数组*/
int MaxSize; /*栈大小*/
}stack; /*初始化空栈*/
void InitStack(stack* st, int sz)
{
st->top = -;
st->MaxSize = sz;
st->data = (datatype*)malloc(sizeof(datatype) * st->MaxSize); //分配内存
}
/*释放站空间*/
void FreeStack(stack* st)
{
free(st->data);
}
/*压栈*/
int Push(stack* st, datatype d)
{
if (st->top == st->MaxSize-) return -;
st->data[++(st->top)] = d;
return ;
}
/*弹栈*/
datatype Pop(stack* st)
{
if ((st->top) == -)
{
printf("llll%d",st->top);
exit(-);
}
else {
return st->data[(st->top)--];
} }
/*取顶*/
datatype getTop(stack* st)
{
if(st->top>-)
return st->data[st->top];
return NULL;
}
/*栈置空*/
void MakeEmpty(stack* st)
{
st->top = -;
} /*后缀表达式计算*/
int Midcal()
{
stack* sptr = (stack*)malloc(sizeof(stack));
char buf[];
int i = , k;
InitStack(sptr, ); printf("input Postfix\n");
scanf_s("%s", buf,); //控制边界 while (buf[i] != '\0')
{
switch (buf[i])
{
case '+':
k = Pop(sptr)+Pop(sptr);
Push(sptr,k);
break; case '-':
k = Pop(sptr);
k = Pop(sptr) - k;
Push(sptr, k);
break;
case '*':
k = Pop(sptr) * Pop(sptr);
Push(sptr, k);
break; case '/':
k = Pop(sptr);
k = Pop(sptr) / k;
Push(sptr, k);
break;
default: Push(sptr, (int)(buf[i] - ));
}
i++;
}
printf("The value is %d\n", Pop(sptr));
return ;
} main() {
Midcal();
}

注:我们在使用scan方法时建议使用scanf_s: 因为这个方法有溢出限制和边界检查,防止因数据溢出造成程序数据混乱的问题。

  其中VS2019以及接近版本都会在使用scanf时报错,强制使用scanf_s.

scanf_s("%type",space,limit)  第一个参数是类型,第二个参数是输入数的存储地址,第三个就是你的限制空间了。

  以上代码部分,如果设置limit <10,就会出现错误,限制小于输入时,超出部分不会进行读取。

  

栈与后缀表达式C实现的更多相关文章

  1. 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题

    表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...

  2. java使用栈计算后缀表达式

    package com.nps.base.xue.DataStructure.stack.utils; import java.util.Scanner; import java.util.Stack ...

  3. 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)

    中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 ...

  4. c++实验4 栈及栈的应用+回文+中、后缀表达式

    栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType ...

  5. C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

    上篇写了MFC界面搭建,这篇就写实现计算.涉及到数据结构,对新手很不友好. 虽然是MFC程序,但是能灵活地分离后台代码,自行构建控制台程序. 上篇文章链接:C++做四则运算的MFC计算器(一)MFC界 ...

  6. 6, java数据结构和算法: 栈的应用, 逆波兰计算器, 中缀表达式--> 后缀表达式

    直接上代码: public class PolandCalculator { //栈的应用:波兰计算器: 即: 输入一个字符串,来计算结果, 比如 1+((2+3)×4)-5 结果为16 public ...

  7. javascript使用栈结构将中缀表达式转换为后缀表达式并计算值

    1.概念 你可能听说过表达式,a+b,a+b*c这些,但是前缀表达式,前缀记法,中缀表达式,波兰式,后缀表达式,后缀记法,逆波兰式这些都是也是表达式. a+b,a+b*c这些看上去比较正常的是中缀表达 ...

  8. 《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果

    /** * 中缀表达式转换成后缀表达式: 从输入(中缀表达式)中读取的字符,规则: 操作数: 写至输出 左括号: 推其入栈 右括号: 栈非空时重复以下步骤--> * 若项不为(,则写至输出: 若 ...

  9. 栈的应用1——超级计算器(中缀与后缀表达式)C语言

    这里要学的程序主要用来实现一个功能——输入表达式输出结果,也就是一个计算器.效果如下: 这个程序主要有两个步骤:1.把中缀表达式转换为后缀表达式:2.计算后缀表达式的结果. 首先先明白几个问题: 1. ...

随机推荐

  1. pytest系列(一):什么是单元测试界的高富帅?

    pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试.自动化测试工作中. unittest也是python语言中一款单元测试框架,但是功能有限,没有pyte ...

  2. 今日资源帖-PPT逆袭秘籍72集+2000套模板,太经典了

    好资源不私藏,分享是一种态度 今日给大家分享的是PPT教程和2000套模板 如何让PPT成为你职场的利器 如何让你的PPT更具表现力 2000套模板随便选 PPT视频教程 链接 https://pan ...

  3. 划分为k个相等的子集

    给定一个整数数组  nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 1: 输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4 ...

  4. 集合系列 Set(七):LinkedHashSet

    LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序. public class LinkedHashSet<E> extends HashSet<E& ...

  5. jQuery 源码解析(二十三) DOM操作模块 替换元素 详解

    本节说一下DOM操作模块里的替换元素模块,该模块可将当前匹配的元素替换指定的DOM元素,有两个方法,如下: replaceWith(value)     ;使用提供的新内容来替换匹配元素集合中的每个元 ...

  6. 1025 PAT Ranking 双重排序

    Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...

  7. iOS 自定义导航栏

    参考链接:https://blog.csdn.net/huanglinxiao/article/details/100537988 demo下载地址:https://github.com/huangx ...

  8. Word List

     周一考试了,单单单词查不完了,只好随便整理一下了

  9. RAID&LVM有关磁盘的故障

    目录 RAID&LVM有关磁盘的故障 RAID 注意:RAID硬盘失效处理--热备和热拔插 RAID实战 LVM介绍 磁盘故障 RAID&LVM有关磁盘的故障 RAID 好处:1.更多 ...

  10. 用while循环写一个简单的猜数字游戏

    import random #练习:模拟猜数字的游戏 """ 计算机出一个1~100之间的随机数由人来猜 计算机根据人猜的数字分别给出 大一点/小一点/猜中了 的提示 & ...