2009-09-10 162 views
2

嘿,所有!我的堆栈有点麻烦。我试图打印我推入堆栈的每个元素。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; 
} 

我的路要走,我需要一些指导做好,如果任何人有足够的时间!

+0

你想查看调试器中的项目?您正在使用哪种编辑器? – Naveen 2009-09-10 05:37:00

+0

不要在SO上使用pre标签,而是使用代码缩进按钮;看到我最后的编辑。 – 2009-09-10 05:38:34

+0

什么样的操作是“拖出来”? – 2009-09-10 05:41:47

回答

3

在for循环中的超载< <运算符中,您正在迭代maxsize次。但是你可能没有将maxsize元素推入堆栈。你应该迭代最佳时间。另外,为项目结构编写一个默认构造函数并初始化所有variblaes,以便在尝试打印它们时不会得到垃圾值。

+0

我不明白,B/C我知道我推超过4 .. – user40120 2009-09-10 05:46:43

+0

可以说你声明堆栈的容量为10并推送4个元素。在你的循环中,你迭代了10次。除此之外,前4将打印正确的值,但接下来的6将是垃圾,因为您既没有初始化,也没有为结构项目中的变量n分配任何值。所以如果你为item结构编写了一个默认的构造函数,那么当你在堆栈的构造函数中创建新的item [容量]并且n将被正确初始化时,它将被调用。 – Naveen 2009-09-10 05:57:10

2

打印堆栈时,只能上到顶部,而不能到达maxSize。