所以我已经梳理了这个网站上关于链表堆栈的内容。我是一个模板类,我也创建了一个Node结构。从我在其他问题中看到的情况来看,我理解考虑到C ++中已经存在的标准库实现,这并不总是最好的as mentioned in this first answer但这是一个赋值所以它都是科学名称。
这是结构,因此您可以了解我所命名的内容
template <class T>
struct Node
{ public:
//data members
T data;
Node<T> *next;
//methods
Node(const T &);
};
template <class T>
Node<T>::Node(const T &newData)
{
data = newData;
next = NULL;
}
没什么特别的。 这些是我的Stack类的数据成员以供参考
private:
Node<T> *stkTop; //or headPtr, so to speak
int stkSize;
这是我的复制构造函数
template <class T>
Stack<T>::Stack(const Stack<T> &existStack)
{
Node<T> *currentNode = existStack.stkTop;
stkSize = 0;
stkTop = NULL;
while( currentNode != NULL )
{
Node<T> *ptr = new Node<T>(0);
ptr -> data = (currentNode -> data);
ptr -> next = stkTop;
stkTop = ptr;
currentNode = currentNode -> next;
stkSize++;
}
到目前为止一直很好...... 我甚至遵守三法则。我也有一个重载的赋值运算符和析构函数(虽然说实话,赋值运算符是完全相同的代码,我只是包含了一个自我赋值的测试)。
我的意思是,它有作品。所有的价值都出现了...只是按相反的顺序...完全难倒。
实现程序我刚刚运行了几个简短的测试,比如显式调用构造函数,将堆栈分配给另一个堆栈,为自己分配一个堆栈。除了订单,一切看起来都很好。我假设我正在遍历我的列表错误或复制值的东西....我不知道:(
答案 0 :(得分:0)
当你上升这个堆栈时,你正在向下堆栈(堆栈顶部到堆栈底部)existsStack with currentNode。您插入的第一个项目应该是顶部,而是您插入的最后一个节点是顶部。