从循环与数组的四次实验中任选1题,通过对题目的分析,提供两种解题算法的代码和对应的流程图,且需对两种算法的思路进行简单讲解,并分析两种算法的差异或优劣。最后在此基础上,仿照所选择的题目,自己出一个新题(PTA的编程题), 需要有题目描述、输入/输出样例、参考代码等内容。
时间: 2023-03-09 21:05:48 浏览: 102
我选择的题目是:利用堆栈来实现一个字符串的倒转,请给出算法代码和流程图,并分析其优缺点。算法一:循环法代码:// 输入:一个字符串str
// 输出:str的倒转字符串
string ReverseStringByLoop(string str)
{
string reversedStr;
for (int i = 0; i < str.length(); i++)
reversedStr.push_back(str[str.length() - i - 1]);
return reversedStr;
}流程图:插图1优点:算法代码简单,实现方便。缺点:运行效率低,对于大数据的字符串倒转,时间复杂度较高。算法二:堆栈法代码:// 输入:一个字符串str
// 输出:str的倒转字符串
string ReverseStringByStack(string str)
{
stack<char> s;
for (int i = 0; i < str.length(); i++)
s.push(str[i]);
string reversedStr;
while (!s.empty())
{
reversedStr.push_back(s.top());
s.pop();
}
return reversedStr;
}流程图:插图2优点:运行效率高,对大数据量的字符串倒转时间复杂度较低。缺点:需要额外分配空间,算法代码相对复杂,实现较为困难。仿照所选择的题目,自己出的一个新题是:利用队列实现一个字符串的倒转,请给出算法代码和流程图,并分析其优缺点。题目描述:给定一个字符串str,利用队列实现str的倒转,并返回倒转后的字符串。输入/输出样例:输入:"abcd"输出:"dcba"参考代码:// 输入:一个字符串str
// 输出:str的倒转字符串
string ReverseStringByQueue(string str)
{
queue<char> q;
for (int i = 0; i < str.length(); i++)
q.push(str[i]);
string reversedStr;
while (!q.empty())
{
reversedStr.push_back(q.front());
q.pop();
}
return reversedStr;
}流程图:插图3优点:运行效率高,对大数据量的字符串倒转时间复杂度较低,代码简单,易于实现。缺点:需要额外分配空间,有可能引发空间浪费。
阅读全文