首页 > 其他分享 >表达式

表达式

时间:2024-08-15 15:08:01浏览次数:7  
标签:Node val top stk rch lch 表达式

表达式

获取优先级

int GetPriority(char c)
{
	if (c == '*')return 0;
	if (c == '+')return -1;
	return -2;
}

中缀转后缀

string PostfixExpression(string str)
{
	string res;
	stack<char>stk;
	for (auto c : str)
	{
		if (c == '_')
		{
			res.push_back(c);
		}
		if (c == '(' || c == ')')
		{
			if (c == '(')
			{
				stk.push('(');
			}
			if (c == ')')
			{
				while (!stk.empty() && stk.top() != '(')
				{
					res.push_back(stk.top()); stk.pop();
				}
				stk.pop();
			}
		}
		if (c == '+' || c == '*')
		{
			while (!stk.empty() && GetPriority(stk.top()) >= GetPriority(c))
			{
				res.push_back(stk.top()); stk.pop();
			}
			stk.push(c);
		}
	}
	while (!stk.empty())
	{
		res.push_back(stk.top()); stk.pop();
	}
	return res;
}

建立表达式树

struct Node
{
	int val;
	char tag;
	Node* lch, * rch;
	Node(int _val = 0, char _tag = ' ', Node* _lch = NULL, Node* _rch = NULL)
	{
		val = _val, tag = _tag;
		lch = _lch, rch = _rch;
	}
};
Node* Build(string str)
{
	stack<Node*>stk;
	for (auto c : str)
	{
		if (c == '0' || c == '1')
		{
			stk.push(new Node(c - '0', ' ', NULL, NULL));
		}
		else
		{
			Node* rch = stk.top(); stk.pop();
			Node* lch = stk.top(); stk.pop();
			stk.push(new Node(((c == '&') ? (lch->val & rch->val) : (lch->val | rch->val)), c, lch, rch));
		}
	}
	return stk.top();
}

标签:Node,val,top,stk,rch,lch,表达式
From: https://www.cnblogs.com/ProtectEMmm/p/18360923

相关文章

  • Lambda表达式
    1、Lambda表达式概述Lambda表达式是JDK1.8之后的一种语法,是一个匿名函数,是对匿名函数的简写形式,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升;importjava......
  • 2024表达式求值
    P06330.表达式求值Description一个数学表达式由下列元素组成:左括号,右括号,加号,减号,乘号,正号,负号,整数(无前导0)。给出一个长度不超过100的数学表达式,求它的值,要求考虑括号和乘法的优先级,计算过程中的临时值的绝对值保证不会超过整数范围。给出的表达式保证合法以及符合人的书写习......
  • Lambda表达式
    lambda表达式基本概念:背景Lambda表达式是JavaSE8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式(Lambdaexpression)......
  • Lambda表达式
    Lambda表达式目录Lambda表达式什么是lambda表达式lambda表达式的由来何时使用lambda表达式lambda表达式语法lambda表达式特性类型推导变量捕获方法引用JAVA提供给我们的SAM接口lambda表达式优缺点优点缺点什么是lambda表达式lambda表达式(拉姆达表达式)是JAVA8中提......
  • vue ---- {{}}插值表达式数据绑定
    数据绑定常用有4种方式:{{}}、v-text、v-html、template{{}}数据绑定最常见的形式就是使用“Mustache”语法(双大括号)的文本插值:<span>message:{{msg}}</span>mustache标签会被替代为对应数据对象航msgproperty的值。无论何时,绑定的数据对象msgproperty发生了改变,插值处的......
  • 正则表达式高级
    正则表达式的三种模式【贪婪、勉强、侵占】假定要分析的字符串是xfooxxxxxxfoo模式.*foo(贪婪模式):模式分为子模式p1(.*)和子模式p2(foo)两个部分.其中p1中的量词匹配方式使用默认方式(贪婪型)。匹配开始时,吃入所有字符xfooxxxxxx去匹配子模式p1。匹配成功,但这样以来就没......
  • Lambda表达式
    [Lang]Lambda表达式1.Lambda表达式的语法[capture](parameters)->return_type{body};capture:捕获外部作用域变量的方式。parameters:参数列表,类似于普通函数。->return_type(可选):返回类型。如果省略,编译器会自动推断。body:函数体,包含需要执行的代码。2.Lambd......
  • 提高效率:Linux 正则表达式实用技巧
    目录前言匹配符号用法讲解“.”用法[]用法“*”用法“.*”用法“\?”用法“\+”用法“\\{n\\}”用法\\{m,n\\}用法锚点符号“^”用法“$”用法“^$”用法或|用法前言在Linux系统中,正则表达式(RegularExpressions,简称regex)是一个强大的工具,广泛应......
  • 表达式目录树
    1.表达式目录树和委托的类比:表达式目录树是一种数据结构、是一种语法树,可以被我们解析: 2.表示式目录树的使用场景:把一个对象中的数据赋值到另一个对象当中:实现对象值赋值:一.反射: 二.序列化器: 三.使用表达式目录树4.使用泛型缓存+表达式目录树 调用如下: 5.Exp......
  • C++ 11 auto(自动类型推导) 和 decltype(获取表达式类型)
    C++(2)auto占位符自动类型推导auto能够实现类型的自我推导,并不代表一个实际的类型声明。auto只是一个类型声明的占位符。auto声明的变量,必须马上初始化,以让编译器推断出它的实际类型,并在编译时将auto占位符替换为真正的类型。注意:C++11中auto不能用于函......