如何在C ++中打印堆栈

时间:2013-03-11 19:53:37

标签: c++ stack

因此,对于我的任务,我们必须修改堆栈类并对其进行测试。我已经成功添加了所有必要的方法,但我坚持的是如何在我演示时打印出堆栈中的内容。所以基本上,我将用随机数据填充堆栈并测试我实现的各种方法,但我不知道如何将堆栈打印到控制台以显示我实际上已经完成了我应该做的事情。我知道这是一个非常基本的问题,但我只是被困在这里。我猜我必须以某种方式使用getTop方法,但是如何使用它来打印堆栈中的内容。以下是我的所有文件:

StackP.cpp

    #include <cassert>

    using namespace std;

     #include "StackP.h"

     Stack::Stack()
        : topPtr(0) {
     }

     Stack::Stack(const Stack& aStack)
        throw(OutOfStorageException) {

        // Original list is empty
        if (aStack.topPtr == 0) {
           topPtr = 0;
        }
        else {
           try {
              // Copy first node
              topPtr = new StackNode;
              topPtr->item = aStack.topPtr->item;

              // Copy rest of list
              StackNode* newPtr = topPtr;    // Pointer to new list 
              for (StackNode* origPtr = aStack.topPtr->next;
                   origPtr != 0;
                   origPtr = origPtr->next) {
                 newPtr->next = new StackNode;
                 newPtr = newPtr->next;
                 newPtr->item = origPtr->item;
              }

             newPtr->next = 0;
           }
           catch (const bad_alloc&) {
           // Release all memory successfully allocated in this copy
              while (!isEmpty() ) {
                pop();
              }
              throw OutOfStorageException("Out of memory");
           }
        }
     }

     Stack::~Stack() {

        // Pop until stack is empty
    while (!isEmpty() ) {                            
       pop();
    }
    assert(topPtr == 0);
 }

 bool Stack::isEmpty() const {

    return topPtr == 0;
 }

 void Stack::push(const StackItemType& newItem)
    throw(OutOfStorageException) {

    try {
       StackNode* newPtr = new StackNode;

       newPtr->item = newItem;

       newPtr->next = topPtr;
       topPtr = newPtr;
    }
    catch (const bad_alloc&) {
       throw OutOfStorageException("Out of memory");
    }
    }
 }

 void Stack::pop()
    throw(OutOfDataException) {

    if (isEmpty() ) {
       throw OutOfDataException("Cannot pop an empty stack.");
    }
    StackNode* temp = topPtr;
    topPtr = topPtr->next;

    temp->next = 0;  // safeguard
    delete temp;
 }

 void Stack::pop(StackItemType& stackTop)
    throw(OutOfDataException) {

    if (isEmpty() ) {
       throw OutOfDataException("Cannot pop an empty stack.");
    }
    stackTop = topPtr->item;
    StackNode* temp = topPtr;
    topPtr = topPtr->next;

    temp->next = 0;  // safeguard
    delete temp;
 }

 void Stack::getTop(StackItemType& stackTop) const
    throw(OutOfDataException) {

    if (isEmpty() ) {
       throw OutOfDataException("Cannot get the top of an empty stack.");
    }
    stackTop = topPtr->item;
 }

  void Stack::popAndDiscard(int count) {

    while (count>0 && !isEmpty()) {

      pop();
      count--;
      }//end while

    }// end popAndDiscard

StackP.h:

#ifndef STACKP_H
 #define STACKP_H 1

 #include "OutOfStorageException.h"
 #include "OutOfDataException.h"

 typedef int StackItemType;

 class Stack {
 public:

    Stack();

    Stack(const Stack& aStack)
       throw(OutOfStorageException);

    ~Stack();

    bool isEmpty() const;

    void push(const StackItemType& newItem)
       throw(OutOfStorageException);

    void pop()
       throw(OutOfDataException);

    void pop(StackItemType& stackTop)
       throw(OutOfDataException);

    void getTop(StackItemType& stackTop) const
       throw(OutOfDataException);

    void popAndDiscard(int count);


 private:

    struct StackNode {
       StackItemType item;

       StackNode* next;
    };

    StackNode* topPtr;
 };

  #endif 

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您应该添加打印功能@WhozCraig建议:

void print(std::ostream& os)
{
    StackNode* current = topPtr;
    while(current != NULL)
    {
        os<<current->item<< " ";
        current = current->next;
    }
}

不要忘记#include <ostream>