zoukankan      html  css  js  c++  java
  • 栈应用

    有关栈API详情參看我的还有一篇博文: 栈的链式存储 - API实现

    遍历后缀表达式中的数字和符号
    对于数字:进栈
    对于符号:
    从栈中弹出右操作数
    从栈中弹出左操作数
    依据符号进行运算
    将运算结果压入栈中
    遍历结束:栈中的唯一数字为计算结果

    #include <stdio.h>
    #include "LinkStack.h"
    
    int isNumber3(char c)
    {
    	return ('0' <= c) && (c <= '9');
    }
    
    int isOperator3(char c)
    {
    	return (c == '+') || (c == '-') || (c == '*') || (c == '/');
    }
    
    int value(char c)
    {
    	return (c - '0');
    }
    
    int express(int left, int right, char op)
    {
    	int ret = 0;
    
    	switch (op)
    	{
    	case '+':
    		ret = left + right;
    		break;
    	case '-':
    		ret = left - right;
    		break;
    	case '*':
    		ret = left * right;
    		break;
    	case '/':
    		ret = left / right;
    		break;
    	default:
    		break;
    	}
    
    	return ret;
    }
    
    int compute(const char* exp)
    {
    	LinkStack* stack = LinkStack_Create();
    	int ret = 0;
    	int i = 0;
    
    	while (exp[i] != '')
    	{
    		if (isNumber3(exp[i]))
    		{
    			LinkStack_Push(stack, (void*)value(exp[i]));
    		}
    		else if (isOperator3(exp[i]))
    		{
    			int right = (int)LinkStack_Pop(stack);
    			int left = (int)LinkStack_Pop(stack);
    			int result = express(left, right, exp[i]);
    
    			LinkStack_Push(stack, (void*)result);
    		}
    		else
    		{
    			printf("Invalid expression!");
    			break;
    		}
    
    		i++;
    	}
    
    	if ((LinkStack_Size(stack) == 1) && (exp[i] == ''))
    	{
    		ret = (int)LinkStack_Pop(stack);
    	}
    	else
    	{
    		printf("Invalid expression!");
    	}
    
    	LinkStack_Destroy(stack);
    
    	return ret;
    }
    
    int main()
    {
    	printf("8 + (3 - 1) * 5  = %d
    ", compute("831-5*+"));
    
    	return 0;
    }
    
    project文件详情:Github

  • 相关阅读:
    GridView绑定模板格式化日期总结
    统计静态页点击量
    行业网seo诊断
    查看sql执行效率
    ItemCommandVSItemDataBound
    【转帖】我眼中的flash和silverlight
    修改SQLserver数据库中的a表的一列等于b表的一列
    过河卒
    最长公共子序列LCS
    情感日记:在中国地质大学的日子
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7294007.html
Copyright © 2011-2022 走看看