gpt4 book ai didi

c++ - 通过 C 中的链表实现的堆栈

转载 作者:行者123 更新时间:2023-11-30 02:09:06 25 4
gpt4 key购买 nike

以下代码是堆栈实现的一部分,通过链表在 C 中实现。代码是否存在问题?具体来说,在 pop() 方法中,调用者传递一个 void** 参数,因此 pop() 可以分配一个指向顶级节点数据的指针给它。 pop() 随后调用 delete 以释放堆栈的顶部节点,这是 *data 指向的位置。这不会删除应该返回给调用者的指针中的数据,还是我遗漏了什么?

typedef struct Element 
{
struct Element *next;
void *data;
} Element;


bool pop( Element **stack, void **data )
{
Element *elem;
if (!(elem = *stack)) return false;

*data = elem->data;
*stack = elem->next;
delete elem;
return true;
}


bool push( Element **stack, void *data )
{
Element *elem = new Element;
if(!elem) return false;

elem->data = data;
elem->next = *stack;
*stack = elem;
return true;
}

最佳答案

一些想法:

  • 如果您想使用 C 编译器编译它,请使用 malloc() 和 free() 而不是 new 和 delete。这些是 C++ 关键字。
  • 如果您需要一种快速确定堆栈大小的方法,我建议创建一个 Stack 数据结构来保存头指针和尾指针以及堆栈的长度,然后将其传递给您的 push() 和 pop() 函数。最重要的是,您不需要双重指针。
  • 从您的 pop() 函数返回数据指针,并且不要忘记 free() 它(如果需要)。

关于c++ - 通过 C 中的链表实现的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779276/

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