gpt4 book ai didi

c++ - 使用 Push、Pop 等在 C++ 中创建堆栈

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

我们正在尝试创建一个像堆栈一样工作的 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 工作,并且始终位于顶部,以便顶部的“真实”元素始终是伪元素的前身 - 但我们我认为这与堆栈的工作方式背道而驰。

那么你们有关于如何进行的任何线索吗?有什么我们只是想念的吗?

最佳答案

1st) 为什么不使用 std::stack

第二)堆栈应该是LIFO .这意味着您的 stack0 应该始终是最新的……这导致:

StackElement* stack0 = NULL;       // until C++11
// StackElement* stack0 = nullptr; // since C++11

void push(int z) {
StackElement *stack1 = new StackElement;
stack1->digit = z;
stack1->predecessor = stack0;
stack0 = stack1;
}

void pop() {
if(stack0) {
StackElement *tmp = stack0;
stack0 = stack0->predecessor;
delete tmp;
}
}

您不需要在 pop 函数中分配一个新的。这将导致巨大的内存泄漏。

你所说的伪元素被称为根元素,有时在序列中使用。但这里没有必要,因为 stack0 是根,或者在本例中是末尾(第一个元素和末尾)。

更好的方法是将其封装在 ryrich 在他的回答中提到的类中。最好的方法是使用 C++ 给定的 std::stack .

关于c++ - 使用 Push、Pop 等在 C++ 中创建堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386858/

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