2009-09-10 229 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。