用C语言写的表达式计算器源代码
这是我用C语言写的表达式计算器程序,因为才学了数据结构中的栈,就完成了这个程序,希望大家多多交流编程心得和体会,欢迎转载和下载哈!谢谢啦!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<cstdlib>
#define MAX 16
#define AGAIN 10
typedef char R_SElemType; //针对运算符//
typedef float D_SElemType; //针对数据//
typedef struct
{
R_SElemType *base;
R_SElemType *top;
int stacksize;
}SqStackR;
typedef struct{
D_SElemType *base;
D_SElemType *top;
int stacksize;
}SqStackD;
void InitStack(SqStackR *S){//针对运算符堆栈的初始化//
S->base = (R_SElemType *)malloc(MAX * sizeof(R_SElemType));
if (!S->base){
printf("糟糕,出初始存储空间分配失败!");
exit(0);
}
S->top = S->base;
S->stacksize = MAX;
} //初始化堆栈//
void InitStack(SqStackD *S){//针对数据堆栈的初始化//
S->base = (D_SElemType *)malloc(MAX * sizeof(D_SElemType));
if (!S->base){
printf("糟糕,出初始存储空间分配失败!");
exit(0);
}
S->top = S->base;
S->stacksize = MAX;
} //初始化堆栈//
int StackEmpty(SqStackR *S){ //针对运算符的清空//
if(S->top == S->base)
return 1;
else
return 0;
} //判断是否空栈//
int StackEmpty(SqStackD *S){
if(S->top == S->base)
return 1;
else
return 0;
} //判断是否空栈//
void DestroyStack(SqStackR *S){//针对字符的清空//
S->top = S->base;
S->stacksize=0;
} //销毁//
void DestroyStack(SqStackD *S){//针对数据的清空//
S->top = S->base;
S->stacksize=0;
} //销毁//
void Push(SqStackR *S,R_SElemType e){ //针对运算符的入栈//
int T = (int)S->top,B =(int)S->base;
if ((T-B) == S->stacksize)
{
S->base = (R_SElemType *)realloc(S->base ,(S->stacksize + AGAIN)*sizeof(R_SElemType));
if (!S->base)
{
printf("糟糕,堆栈的重新分配失败,悲剧啦!");
exit(0);
}
S->top = S->base + S->stacksize;
S->stacksize = S->stacksize + AGAIN;
}
*(S->top) = e;
S->top++;
} //入栈//
void Push(SqStackD *S,D_SElemType e){ //针对运算符的入栈//
int T = (int)S->top,B =(int)S->base;
if ((T-B) == S->stacksize)
{
S->base = (D_SElemType *)realloc(S->base ,(S->stacksize + AGAIN)*sizeof(D_SElemType));
if (!S->base)
{
printf("糟糕,堆栈的重新分配失败,悲剧啦!");
exit(0);
}
S->top = S->base + S->stacksize;
S->stacksize = S->stacksize + AGAIN;
}
*(S->top) = e;
S->top++;
} //入栈//
char Pop(SqStackR *S){
R_SElemType e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
S->top--;
e = *(S->top);
return e;
} //出栈:e返回栈顶元素后,删除栈顶元素//
float Pop(SqStackD *S){
D_SElemType e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
S->top--;
e = *(S->top);
return e;
} //出栈:e返回栈顶元素后,
删除栈顶元素//
char GetTop(SqStackR *S){
char e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
e = *(S->top - 1);
return
这是我用C语言写的表达式计算器程序,因为才学了数据结构中的栈,就完成了这个程序,希望大家多多交流编程心得和体会,欢迎转载和下载哈!谢谢啦!
e;
} //取栈顶元素//
float GetTop(SqStackD *S){
float e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
e = *(S->top - 1);
return e;
} //取栈顶元素//
int Determine(char c){
char ch[7] = {'+','-','*','/','\n','(',')'};
int i;
for (i = 0;i < 7;i++)
{
if(c == ch[i])
return 1;
}
return 0;
} //判断是否为字符//
char OperatorPriority(char top,char c){
char ch;
if (top == '(' && c == ')' ||top == '\n' && c == '\n')
ch = '=';
else
if(top=='+' || top=='-') //栈顶元素为‘+’或‘-’的时候//
switch(c)
{
case '+':
case '-':
case ')':
case '\n': ch = '>'; break;
case '*':
case '/':
case '(': ch = '<';
}
else
if(top=='*' || top=='/') /*栈顶元素为‘*’或‘/’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case ')':
case '\n': ch = '>'; break;
case '(': ch = '<';
}
else
if(top=='(') /*栈顶元素为‘(’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '(': ch = '<'; break;
case '\n': printf("悲剧,出错啦!------(温馨提示:错误1)\n"); exit(0);
}
else
if(top==')') /*栈顶元素为‘)’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '\n': ch = '>'; break;
case '(': printf("悲剧出错啦!-------(温馨提示:错误2)\n"); exit(0);
}
else
if(top=='\n') /*栈顶元素为‘#’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '(': ch = '<'; break;
case ')': printf("悲剧:出错啦!-------(温馨错误3)\n"); exit(0);
}
return ch;
}
float Operate(float a,char r,float b){
float s, d1 = a, d2 = b;
switch(r){
case '+':s = d1 + d2;break;
case '-':s = d2 - d1;break;
case '*':s = d1 * d2;break;
case '/':if(d1 == 0){s = 0; break;} s = d2 / d1;br
…… 此处隐藏:2998字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [公文资料]市场营销专员岗位职责
- [公文资料]综合部经理岗位职责
- [公文资料]会计助理岗位职责
- [公文资料]林业站站长职责
- [公文资料]菜品研发部岗位职责
- [公文资料]街道综治办工作职责
- [公文资料]酒店前台的工作职责
- [公文资料]销售部经理岗位职责
- [公文资料]工程部副经理岗位职责
- [公文资料]手术室护士工作职责
- [公文资料]银行客户经理职责
- [公文资料]汽车4s店市场专员职责
- [公文资料]服装店长工作职责
- [公文资料]采购总监岗位职责
- [公文资料]大学行政秘书工作职责
- [公文资料]学校财务人员岗位职责
- [公文资料]财务统计员岗位职责
- [公文资料]物业工程主管工作职责
- [公文资料]公司后勤工作职责
- [公文资料]采矿工程师岗位职责
- 门面出租合同样板(门面出租的合同)
- 自用房屋租赁合同 自住房租房合同(汇总
- 最新酒店劳动合同管理制度(11篇)(酒店
- 2025年无产权车库买卖合同实用(14篇)(
- 建筑工程农民工劳动合同十五篇(通用)(
- 最新深圳标准劳动合同 深圳劳动合同如
- 解除劳动合同通知书(实用6篇)(解除劳动
- 2025年二手房屋买卖合同范围精选(二十
- 最新融资贷款居间合同大全(22篇)(融资
- 2025年个人二手房屋买卖合同协议书四篇
- 2025年果树苗木买卖合约书 签订果树苗
- 广东省劳动合同书填写(21篇)(广东省劳
- 最新餐饮行业没有劳动合同 劳动法餐饮
- 农村土地买卖合同(汇总21篇)(农村土地
- 最新房屋转租合同模版21篇(通用)(标准
- 2025年进口合同号查询五篇(大全)(进口
- 农村建房包工包料合同(通用8篇)(农村建
- 2025年安装监控合同协议书(15篇)(2025
- 2025年企业租赁经营合同(模板9篇)(2025
- 最新郊区土地租赁合同(优质23篇)(最新




