我已经成功地在C语言中实现了分流码算法,将内缀表达式转换为后缀表达式(RPN)。我需要修改我的算法来返回前缀(抛光)表达式,但我不知道怎么做。
void Prefix::fromInfix()
{
//The stack contain the operators
std::stack<std::string> pile;
//This is the output
std::vector<std::string> sortie;
//The input is the std::vector<std::string> _expression
pile.push("(");
_expression.push_back(")");
for (auto iter = _expression.begin(); iter != _expression.end(); iter++)
{
//statOperator detect if the token is an operator and the priority of the operator.
short op = statOperator(*iter);
if (*iter == "(")
pile.push(*iter);
else if (*iter == ")")
{
while (pile.top() != "(")
{
sortie.push_back(pile.top());
pile.pop();
}
pile.pop();
}
else if (op)
{
while (!pile.empty())
{
short op2 = statOperator(pile.top());
//if op2 is is have the priority and isn't a parenthesis.
if (op <= op2 && op2 != 3)
{
sortie.push_back(pile.top());
pile.pop();
}
else
break;
}
pile.push(*iter);
}
else
sortie.push_back(*iter);
}
_expression = sortie;
}
我只需要从右向左读取输入。
for (auto iter = _expression.rbegin(); iter != _expression.rend(); iter++)
完全反转括号角色。
_expression.insert(_expression.begin(), "(");
pile.push(")");
在循环中。
if (*iter == ")")
pile.push(*iter);
else if (*iter == "(")
{
while (pile.top() != ")")
{
sortie.push(pile.top());
pile.pop();
}
pile.pop();
}
并反向输出(我使用了堆栈)。
while (!sortie.empty())
{
_expression.push_back(sortie.top());
sortie.pop();
}
本文向大家介绍python插入排序算法实例分析,包括了python插入排序算法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python插入排序算法。分享给大家供大家参考。具体如下: 另外一个版本: 希望本文所述对大家的Python程序设计有所帮助。
KMP算法与前缀函数 (一)前缀函数 一个字符串s的border是一个最长的字符串,且既是s的后缀,又是s的真前缀。 给定长为n的字符串s,其前缀函数定义为一个长为n的数组π。其中π[i]为s的第i个前缀的border长度。 (二)KMP算法 全称为 Knuth-Morris-Pratt 算法,是由 Knuth, Morris 和 Pratt 这三个人创造的算法,可以在O(n+m)的时间内使用 O
本文向大家介绍C++插入排序算法实例,包括了C++插入排序算法实例的使用技巧和注意事项,需要的朋友参考一下 插入排序 没事喜欢看看数据结构和算法,增加自己对数据结构和算法的认识,同时也增加自己的编程基本功。插入排序是排序中比较常见的一种,理解起来非常简单。现在比如有以下数据需要进行排序: 10 3 8 0 6 9 2 当使用插入排序进行升序排序时,排序的步骤是这样的: 10 3 8 0 6 9 2
本文向大家介绍C#二叉搜索树插入算法实例分析,包括了C#二叉搜索树插入算法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#二叉搜索树插入算法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 话不多说,上code: /** * @param {stri
主要内容:插入排序算法的具体实现插入排序算法可以对指定序列完成升序(从小到大)或者降序(从大到小)排序,对应的时间复杂度为 。 插入排序算法的实现思路是:初始状态下,将待排序序列中的第一个元素看作是有序的子序列。从第二个元素开始,在不破坏子序列有序的前提下,将后续的每个元素插入到子序列中的适当位置。 举个简单的例子,用插入排序算法对 {14, 33, 27, 10, 35, 19, 42, 44} 实现升序排序的过程如下: 1)