3. 栈

    一般而言,可以使用以下作为栈的存储结构

#define MAXSIZE 50;
typedef struct 
{
    int data[MAXSIZE];
    int top
}sqStack;

    但在实际解题时,最方便的都是使用数组和一个整数来表示,以下也将用这种方法

1. 检查一个括号表达式是否有问题。例如[()()]这样没有问题,但[()(])这就有问题

     比较简单,一个基本的栈的运用。第一次10分钟写完,14分钟调试完毕;第二次7分钟写完,10分钟调试完毕。

int checkMatch_2(char m[])
{
    char stack[50];
    int top = 0; //top使用-1和0是两种习惯

    int i = 0;
    for(i = 0; m[i] != '\0'; i++)
    {
    	if(m[i] == '[' || m[i] == '(' || m[i] == '{')
    		stack[top++] = m[i];
    	else //右括号
    	{
            if(top == 0) return 0;
            if(m[i] == ']')
            {
            	if(stack[top - 1] != '[') return 0;
            	else top--;
            }else if(m[i] == ')')
            {
            	if(stack[top - 1] != '(') return 0;
            	else top--;
            }else if(m[i] == '}')
            {
            	if(stack[top - 1] != '{') return 0;
            	else top--;
            }
    	}
    }

    if(top == 0) return 1;
    else return 0;
}

2. 整数表达式求值,不考虑括号。这个题目我在企业的面试题也刚好遇到过,恰好原题。

    总体思路是先乘除后加减。遍历两次,第一次遍历将乘除立即处理,加减压栈;第二次遍历弹栈处理加减。第一次15分钟写完,25分钟调试完毕;第二次18分钟调试完毕。

int isNum_2(char c)
{
	return c >= '0' && c <= '9';
}

float compute_2(char* m)
{
	int op[50];    int t_op = 0;
	float num[50]; int t_num = 0;

    int i = 0;
    for(i = 0; m[i] != '\0'; i++)
    {
    	if(isNum_2(m[i]))
    		num[t_num++] = (float)(m[i] - '0');
    	else if(m[i] == '*')
    		num[t_num - 1] *= (m[++i] - '0');
    	else if(m[i] == '/')
    		num[t_num - 1] /= (float)(m[++i] - '0');
    	else
    		op[t_op++] = m[i];
    }

    for(i = 0; i < t_op; i++)
    {
        if(op[i] == '+')
        	num[i + 1] += num[i];
        else if(op[i] == '-')
        	num[i + 1] = num[i] - num[i + 1];
    }
    return num[t_op];
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值