用C语言写的表达式计算器源代码

时间:2026-01-21

这是我用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 …… 此处隐藏:2895字,全部文档内容请下载后查看。喜欢就下载吧 ……

用C语言写的表达式计算器源代码.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219