逆波兰计算器的完整C代码怎么写

发布时间:2021-10-14 14:26:56 作者:柒染
来源:亿速云 阅读:163

这篇文章给大家介绍逆波兰计算器的完整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代码怎么写就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 逆波兰算法
  2. 如何用C代码给Python写扩展库(Cython)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:如何实现基于Jedis+ZK的分布式序列号生成器

下一篇:html5如何使用canvas画图

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》