【问题标题】:About Queue Data Structure关于队列数据结构
【发布时间】:2021-06-30 09:38:31
【问题描述】:

大家好,我知道这不是写队列的好方法,但我想了解这个东西

在我的代码中,我有一个 Node 类,里面只有(int dataNode Next)。

在其他班级,我正在这样做

Node head = new Node(1);
            head.next = new Node(2);
            head.next.next = new Node(3);
           
            Node temp = head;
            temp.next.next.next = new Node(4);

 Console.WriteLine(head.data + "\n" + head.next.data + "\n" + head.next.next.data + "\n"+head.next.next.next.data);

我得到了这个输出。

1
2
3
4

我想了解为什么head 打印找到了我在 Temp 中创建的最后一个节点

有人能理解我并告诉我为什么吗?

Node Temp 刚刚复制了head 并添加了一个新节点,即 4 但是是什么让最后一个节点出现在head?。

【问题讨论】:

    标签: c# data-structures queue nodes fifo


    【解决方案1】:

    您需要了解此引用类型。所以类/对象是引用类型。

    引用类型,扩展 System.Object 并指向内存中包含实际数据的位置。

    所以当你说 Node temp=head` 时。

    现在两个对象都指向同一个位置,其中一个的任何变化都会改变另一个

    https://www.tutlane.com/tutorial/csharp/csharp-value-type-and-reference-type-with-examples

    https://www.infoworld.com/article/3043992/a-deep-dive-value-and-reference-types-in-net.html

    所以首先 new 关键字总是创建新对象。所以当你分配 head= temp 时,你可以看到 temp 和 head 是相同的

    只要你说,temp=temp.next,现在它会指向下一个节点,现在 head 和 temp 将不一样。Temp 将指向 head 的下一个节点

    现在只要你写temp = new Node("10");它就会创建新对象并分配给temp。所以新关键字总是会创建新对象

    但如果你这样做 temp.Data="10" 不做 temp=new Node("10");,它会同时改变 head 和 temp

    ;

    【讨论】:

    • 很明显我理解你。但是当有很多(下一步)时,我需要做的是像这样while(temp.next!=null) { temp=temp.next } temp.next=new Node......etc 这样循环,while 循环正在破坏 temp 到达最后一个节点,为什么 head 在这里不受影响。
    • 您的答案很明确,因此我可以更改 temp 指向的位置,但是当我更改任何数据或创建新节点时,head 和 temp 都会受到影响。但是现在我可以知道您是如何在第三张图片中将鼠标悬停信息放在head 上方的吗?我正在运行 VS 的更新版本,但将鼠标悬停在 Head 上并没有给出这张幻灯片。
    • 在调试时您可以这样做,我使用的是 Visual Studio 2019,只需将鼠标悬停在对象上,然后您就可以获得该对象的所有详细信息。
    • 如果您觉得答案有用,请点赞。
    • 我只是想知道为什么当我执行temp.next=temp.next.next 时头部会受到影响,而当我执行temp=temp.next 时头部不会受到影响。这里有一些不清楚的地方。
    猜你喜欢
    • 2023-03-10
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多