【发布时间】:2013-12-21 14:49:44
【问题描述】:
我们正在尝试创建一个像堆栈一样工作的 C++ 程序。 给出以下说明: 应该有几种方法:
我们必须使用StackElement的这个定义:
struct StackElement {
int digit;
StackElement* predecessor;
};
现在的问题是如何在没有 next 参数的情况下创建push-函数,就像普通列表一样。 pop 函数也是如此。
我们完成了让push() 创建一个新的 StackElement 和pop() 删除新的元素,但是有了 2 个新元素,这些方法无法正常工作。
全局参数stack0:
StackElement *stack0 = new StackElement;
这是push-函数的代码:
StackElement push(int z){
StackElement *stack1 = new StackElement;
stack1->digit = z;
stack1->predecessor = NULL;
stack0->predecessor = stack1;
stack1 = stack0;
这是pop() 方法:
void pop(){
StackElement *stack1 = new StackElement;
if (stack0!=NULL){
stack1->digit = 0;
stack0->predecessor = NULL; //predecessor = NULL;
}
}
最后是main 方法:
int main()
{
int z;
create();
cout << "Which number to the stack?" << endl;
cin >> z;
push(z);
pop();
print();
return 0;
}
我们考虑过创建一个新的 StackElement,它可以作为“伪”StackElement 工作,并且始终保持在顶部,这样顶部的“真实”元素将始终是伪元素的前身 - 但我们认为这会违反堆栈的工作方式。
那么你们对如何进行有任何线索吗?有什么我们缺少的吗?
【问题讨论】:
-
为什么
pop是void函数?我希望它返回int... -
stack1 = stack0;绝对没有意义。 stack1 是函数中的局部变量。