C++堆栈实现
问题描述:
嘿,所有!我的堆栈有点麻烦。我试图打印我推入堆栈的每个元素。C++堆栈实现
从堆栈开始我们知道我们有一个固定的数组大小。所以我分配的项目结构对象持有只是多少空间:
stack::stack(int capacity)
{
items = new item[capacity];
if (items == NULL) {
throw "Cannot Allocoate Sufficient Memmory";
exit(1);
}
maxSize = capacity;
top = -1;
}
是,项目是对象“项”的结构类型。看一看:
class stack
{
stack(int capacity);
~stack(void);
...
private:
int maxSize; // is for the item stack
int top; // is the top of the stack
struct item {
int n;
};
item *items;
public:
friend ostream& operator<<(ostream& out, stack& q)
...
第一和formost我们想通过每个传入元素推入阵FILO添加到堆栈:
bool stack::pushFront(const int n)
{
if (top >= maxSize-1)
{
throw "Stack Full On Push";
return false;
}
else
{
++top;
items[top].n = n;
}
return true;
}
// just a textbook example here:
stack::~stack(void)
{
delete [] items;
items = NULL;
maxSize = 0;
top = -1;
}
是对我来说,真正的问题是项目[++顶部] .n = n;声明。我一直在试图找出如何将(+)items数组拖放到堆栈中以查看所有数组元素。
我想知道为什么我不能拖动那些项目[++ top] .n = n语句在调试时出现。所有出现的是作为'n'参数传递的值。我是否需要使用堆栈对象类型数组将值存储到?
当我重载< <运营商和尝试打印,我得到一个疯狂的大负数的元素:
ostream& operator<<(ostream& out, stack& q)
{
if (q.top <= 0) // bad check for empty or full node
out << endl << "stack: empty" << endl << endl;
else
for (int x = 0; x < q.maxSize; x++)
{
out << q.items[x].n; // try to print elements
}
return out;
}
我的路要走,我需要一些指导做好,如果任何人有足够的时间!
答
在for循环中的超载< <运算符中,您正在迭代maxsize次。但是你可能没有将maxsize元素推入堆栈。你应该迭代最佳时间。另外,为项目结构编写一个默认构造函数并初始化所有variblaes,以便在尝试打印它们时不会得到垃圾值。
答
打印堆栈时,只能上到顶部,而不能到达maxSize。
你想查看调试器中的项目?您正在使用哪种编辑器? – Naveen 2009-09-10 05:37:00
不要在SO上使用pre标签,而是使用代码缩进按钮;看到我最后的编辑。 – 2009-09-10 05:38:34
什么样的操作是“拖出来”? – 2009-09-10 05:41:47