栈与后缀表达式C实现
#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实现的更多相关文章
- 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题
表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...
- java使用栈计算后缀表达式
package com.nps.base.xue.DataStructure.stack.utils; import java.util.Scanner; import java.util.Stack ...
- 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)
中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 ...
- c++实验4 栈及栈的应用+回文+中、后缀表达式
栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType ...
- C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式
上篇写了MFC界面搭建,这篇就写实现计算.涉及到数据结构,对新手很不友好. 虽然是MFC程序,但是能灵活地分离后台代码,自行构建控制台程序. 上篇文章链接:C++做四则运算的MFC计算器(一)MFC界 ...
- 6, java数据结构和算法: 栈的应用, 逆波兰计算器, 中缀表达式--> 后缀表达式
直接上代码: public class PolandCalculator { //栈的应用:波兰计算器: 即: 输入一个字符串,来计算结果, 比如 1+((2+3)×4)-5 结果为16 public ...
- javascript使用栈结构将中缀表达式转换为后缀表达式并计算值
1.概念 你可能听说过表达式,a+b,a+b*c这些,但是前缀表达式,前缀记法,中缀表达式,波兰式,后缀表达式,后缀记法,逆波兰式这些都是也是表达式. a+b,a+b*c这些看上去比较正常的是中缀表达 ...
- 《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果
/** * 中缀表达式转换成后缀表达式: 从输入(中缀表达式)中读取的字符,规则: 操作数: 写至输出 左括号: 推其入栈 右括号: 栈非空时重复以下步骤--> * 若项不为(,则写至输出: 若 ...
- 栈的应用1——超级计算器(中缀与后缀表达式)C语言
这里要学的程序主要用来实现一个功能——输入表达式输出结果,也就是一个计算器.效果如下: 这个程序主要有两个步骤:1.把中缀表达式转换为后缀表达式:2.计算后缀表达式的结果. 首先先明白几个问题: 1. ...
随机推荐
- pytest系列(一):什么是单元测试界的高富帅?
pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试.自动化测试工作中. unittest也是python语言中一款单元测试框架,但是功能有限,没有pyte ...
- 今日资源帖-PPT逆袭秘籍72集+2000套模板,太经典了
好资源不私藏,分享是一种态度 今日给大家分享的是PPT教程和2000套模板 如何让PPT成为你职场的利器 如何让你的PPT更具表现力 2000套模板随便选 PPT视频教程 链接 https://pan ...
- 划分为k个相等的子集
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 1: 输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4 ...
- 集合系列 Set(七):LinkedHashSet
LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序. public class LinkedHashSet<E> extends HashSet<E& ...
- jQuery 源码解析(二十三) DOM操作模块 替换元素 详解
本节说一下DOM操作模块里的替换元素模块,该模块可将当前匹配的元素替换指定的DOM元素,有两个方法,如下: replaceWith(value) ;使用提供的新内容来替换匹配元素集合中的每个元 ...
- 1025 PAT Ranking 双重排序
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...
- iOS 自定义导航栏
参考链接:https://blog.csdn.net/huanglinxiao/article/details/100537988 demo下载地址:https://github.com/huangx ...
- Word List
周一考试了,单单单词查不完了,只好随便整理一下了
- RAID&LVM有关磁盘的故障
目录 RAID&LVM有关磁盘的故障 RAID 注意:RAID硬盘失效处理--热备和热拔插 RAID实战 LVM介绍 磁盘故障 RAID&LVM有关磁盘的故障 RAID 好处:1.更多 ...
- 用while循环写一个简单的猜数字游戏
import random #练习:模拟猜数字的游戏 """ 计算机出一个1~100之间的随机数由人来猜 计算机根据人猜的数字分别给出 大一点/小一点/猜中了 的提示 & ...