C++ 在不访问StackType对象的情况下修改堆栈顶部
我对早些时候被问到的一个问题有疑问 我得到了这个函数prototypeC++ 在不访问StackType对象的情况下修改堆栈顶部,c++,pointers,stack,C++,Pointers,Stack,我对早些时候被问到的一个问题有疑问 我得到了这个函数prototypevoid StackPop(NodeType*Top),并被告知在不访问堆栈对象的情况下修改堆栈顶部StackPop函数这里是一个全局函数,而不是Stack类的成员函数。弹出后,Top应指向Top元素的新值 作为解决方案,只有在调用时将堆栈顶部节点的地址传递给函数,才能在这种情况下弹出堆栈顶部。例如:StackPop(&address) 修改堆栈顶部的步骤 NodeType* temp; temp = top; *top =
void StackPop(NodeType*Top)
,并被告知在不访问堆栈对象的情况下修改堆栈顶部StackPop
函数这里是一个全局函数,而不是Stack类的成员函数。弹出后,Top应指向Top元素的新值
作为解决方案,只有在调用时将堆栈顶部节点的地址传递给函数,才能在这种情况下弹出堆栈顶部。例如:StackPop(&address)代码>
修改堆栈顶部的步骤
NodeType* temp;
temp = top;
*top = (*top)->next;
delete temp;
这是对问题的简单回答还是必须注意的其他问题?是的,这是对问题的有效简单回答,但有三点需要注意:
temp=top
应为temp=*top
李>
您可能希望优雅地处理*top
为NULL的情况(而不仅仅是取消对NULL指针的引用)李>
此解决方案当然与您获得的原型不兼容[void StackPop(Node*Top)
],因为它将Node**
作为其参数
我唯一要说的是,StackPop
听起来应该是一个成员函数,而不是自由函数。你的函数参数是Node
还是NodeType
?@Als:edited。是的,它是NodeType
。是的,它是一个自由函数,而不是类成员函数,但会影响上面所述的弹出功能(前提是我们忽略必须传递顶级节点地址的事实)?@Cipher:否,功能上没有区别。可以说是糟糕的设计。不以任何方式修改原型(即不更改为StackPop(NodeType**node))是否可能?