用C语言写的表达式计算器源代码
时间:2026-01-21
时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:国内外14座桥梁严重垮塌事故
下一篇:毛概课件第八章第二节