gpt4 book ai didi

c++ - 如何在 C++ 中打印堆栈

转载 作者:行者123 更新时间:2023-11-30 04:20:20 24 4
gpt4 key购买 nike

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

堆栈P.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

堆栈P.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

预先感谢您的帮助!

最佳答案

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

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

别忘了 #include <ostream>

关于c++ - 如何在 C++ 中打印堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com