您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
这篇文章给大家介绍逆波兰计算器的完整C代码怎么写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
/* 逆波兰计算器 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef double Elemtype;
typedef struct StackNode {
Elemtype data;
struct StackNode *next;
}StackNode, *pStackNode;
typedef struct LinkStack {
pStackNode top;
int count;
}LinkStack, *pLinkStack;
//链栈创建和初始化
pLinkStack InitStack ( void )
{
pLinkStack s = (pLinkStack)malloc(sizeof(LinkStack));
s -> top = NULL;
s -> count = 0;
return s;
}
//链栈是否为空
int StackEmpty( pLinkStack s )
{
return (s -> top == NULL ? 1 : 0 );
}
//链栈入栈
void Push( pLinkStack s, Elemtype e )
{
pStackNode p = (pStackNode)malloc(sizeof(StackNode));
p -> data = e;
if( s -> top != NULL )
p -> next = s -> top;
s -> top = p;
s -> count++;
}
//链栈出栈
Elemtype Pop( pLinkStack s )
{
Elemtype temp;
pStackNode p;
if( StackEmpty(s) )
exit(0);
temp = s -> top -> data;
p = s -> top;
s->top = s->top->next;
free(p);
s->count--;
return temp;
}
int main()
{
char c;
Elemtype temp1, temp2;
char str[20];
int i=0;
pLinkStack s = InitStack();
printf("请输入表达式 :\n");
scanf("%c", &c);
while( c != '\n' ) {
while( isdigit(c) || c=='.' ) {//过滤数字
str[i++] = c;
str[i] = '\0';
if( i>=20 )
printf("出错: 输入的数据过大!\n");
scanf("%c", &c);
if( c == ' ' ) {
Push( s, atof(str));
i = 0;
break;
}
}
switch( c ) {
case '+':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 + temp1 );
break;
case '-':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 - temp1);
break;
case '*':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 * temp1);
break;
case '/':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 / temp1);
break;
default:
break;
}
scanf("%c", &c);
}
printf("结果为: %f\n", Pop(s));
return 0;
}关于逆波兰计算器的完整C代码怎么写就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。