gpt4 book ai didi

c++ - 为什么用C++中的链表完成此操作? (像堆栈一样处理它们)

转载 作者:行者123 更新时间:2023-12-02 10:00:31 25 4
gpt4 key购买 nike

我有以下代码:

#include<iostream>
#include<stdlib.h>
using namespace std;

struct Nodo{
int valor;
Nodo *siguiente;
};

// Lista enlazada "simple", manipulandola con el metodo LIFO (pila).

void agregar_nodo(Nodo *&cima, int n); // ¿Puntero por referencia?

int main(){
Nodo *cima = NULL;
agregar_nodo(cima, 2);
agregar_nodo(cima, 4);

return 0;
}

void agregar_nodo(Nodo *&cima, int n){
Nodo *nuevo_nodo = new Nodo(); // (struct Nodo) | Nodo() Se puede usar cualquier sintaxis
nuevo_nodo->valor = n;
nuevo_nodo->siguiente = cima;
cima = nuevo_nodo;
}
经过数小时的研究,我设法理解了代码的逻辑(这不是我的,而是我遵循的类(class))。但是,在上述调查中我无法消除三个疑问:
  • 为什么使用new?
    我的意思是,我认为没有必要使用它,为什么在这种情况下使用它?
    可以在没有新代码的情况下完成以前的代码吗?在这种情况下,情况如何?
  • 删除发生了什么?
    我了解在c++中,每次使用new运算符时,都必须将其各自的删除内容放入。为什么在这种情况下没有?
  • 为什么通过引用传递指针? (函数“agregar_nodo”的第一个参数)

  • This is the most curious of all because I understand that in C, thereferences are made with pointers, but in C ++ we can do itboth with pointers and with the unary operator.


    清楚地说,我知道没有必要将指针与一元运算符一起传递。假定仅将此指针与指针一起使用(尽管该函数像往常一样进行复制,但作为指针,我们将拥有原始存储地址,即函数外部的指针)。 )
    那么为什么将两者一起使用呢?
    非常感谢你。

    最佳答案

    问题答案:

  • 如果您不使用new,那么Nodo对象将存放在哪里?它们必须是堆栈上的本地变量,或者是全局变量。如果它们是本地人,那么一旦声明它们的函数退出,它们就会消失。如果它们是全局变量,那么您只能使用一定数量的变量,无论您声明了多少。如果要在每次有人调用agregar_nodo时扩展链接列表,则必须每次在堆中分配一个带有Nodo的新new
  • 该程序是一个示例,向您展示如何向链接列表添加元素。没有代码可以从链表中删除任何内容,这是使用delete的地方。
  • 该代码将新元素添加到链接列表的前面。每次将新元素添加到最前面时,都必须更新“列表的开始”或“head”指针以指向新的第一个元素。头指针(显然)是一个指针,而agregar_nodo必须对其进行更新,因此它作为对指针的引用传入。有时程序会使用指向指针的指针来代替(因此它将是Nodo **cima)。

  • 最后一个有点棘手。如果以这种方式声明了函数,则没有引用:
    void agregar_nodo(Nodo *cima, int n)
    那么它仍然可以编译,但是,当您运行它时,最后一行 cima = nuevo_nodo将更新局部变量 cima,而不是 main函数中的变量。因此,在您第一次调用该函数之后, cima中的 main仍然是 NULL。因此,该函数改为通过引用接受它,因此该函数可以更新 cima中的 main

    关于c++ - 为什么用C++中的链表完成此操作? (像堆栈一样处理它们),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62723854/

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