逆波兰计算器的完整C代码怎么写
创始人
2024-12-26 00:43:08
0次
/* 逆波兰计算器 */

#include
#include
#include
#include

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;
}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...