当提供巨大的输入时,中止在堆栈操作程序中调用错误
Abort called error in a program of stack operation when providing a huge input
//Stack Operation
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int> stack;
vector<int>::iterator it;
int maxptr=-1;
it=stack.begin();
int n;
cin>>n;
for(int i=0,q,x,c=0,count;i<n;i++)
{
cin>>q;
if(q==1)
{
cin>>x;
stack.push_back(x);
if(x>c)
{
count=maxptr;
maxptr=stack.size()-1;
c=x;
}
}
else if(q==2)
{
if(stack.back()==stack.at(maxptr))
{
maxptr=count;
}
stack.pop_back();
if(maxptr==-1)
{
c=0;
}
else if(stack.size()==0)
{
c=0;
}
else
{
c=stack.at(maxptr);
}
}
else if(q==3)
{
cout<<stack.at(maxptr)<<endl;
}
}
}
上面的代码是执行 3 个查询的基本堆栈程序。 查询 1:在堆栈中推送元素。 查询 2:从堆栈中弹出最顶层的元素。 查询 3:从堆栈中当前存在的元素中查找堆栈中的最大元素。 我使用向量来实现代码,但问题是对于输入测试用例 1 和输入测试用例 2 等大输入,会给出中止称为错误。
您可以通过使用两个堆栈和对代码进行一些修改来解决它。 它将通过所有测试用例。
#include<cmath>
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
vector<int> stack;
vector<int> maxele;
int maxptr=-1;
int n,ct;
cin>>n;
for(int i=0,q,x,c=0;i<n;i++)
{
cin>>q;
if(q==1)
{
cin>>x;
stack.push_back(x);
if(x>=c)
{
maxele.push_back(x);
maxptr=maxele.size()-1;
c=x;
}
}
else if(q==2)
{
if(stack.back()==maxele.back())
{
stack.pop_back();
maxele.pop_back();
maxptr=maxele.size()-1;
}
else
{
stack.pop_back();
}
if(maxptr==-1)
{
c=0;
}
else if(stack.size()==0)
{
c=0;
}
else
{
c=maxele.at(maxptr);
}
}
else if(q==3)
{
cout<<maxele.at(maxptr)<<endl;
}
}
}
此代码中调用的中止错误是由于边界情况引起的,即如果两个 相同的元素一个接一个地插入,然后由于查询 1 中的条件,即如果你在两个相同的元素上执行这个条件"if(x>c)",那么它不会让 maxptr 更新为"c=x"条件"if(x>c)"将变为假。
相关文章:
- 为什么在堆栈和堆上创建变量会产生相同的程序集代码?
- 我的堆栈和库存清单程序的结构有什么问题?
- 堆栈粉碎终止程序
- 如何从 x64 程序集中的堆栈中获取参数?
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- Haskell堆栈设置 - 无法识别CPP程序
- 如何制作硬编码堆栈,而不是硬编码并保持程序正常运行
- 使用 valgrind 的地块测量 c++ 应用程序的最大内存使用量(堆栈和堆)
- 当提供巨大的输入时,中止在堆栈操作程序中调用错误
- 如何在内联程序集中调用函数时保留堆栈
- 堆栈程序输入名称并重印在C 中
- 程序终止时堆栈损坏?
- 有没有办法避免在发生堆栈粉碎时终止程序
- 如何在应用程序开始时破坏堆栈
- 我无法获得由 Clang 构建的优化 NDK 应用程序的调用堆栈
- C++堆栈:程序未执行
- C++ 堆栈程序 指针问题的 Wsing 数组 新字符[len],其中 len 为 2 创建 16 个字符
- 在堆栈程序中实现一个计数器,用于计算对象移动的次数
- 试图写一个c++堆栈程序