首页 > 解决方案 > 试图理解链表+类概念

问题描述

我正在研究 C# 中的列表,我有一个很大的疑问,您在这里看到,属性“Siguiente”属于同一类的类型,我不明白这如何影响内部代码以及实际意味着什么,列表有效,即属性用于在列表中创建指针。我的疑问是

  1. 在哪个方面它会影响在同一类中具有该类类型的变量?
  2. 系统如何知道这是一个指针?
  3. 是否在“Trabajo”中添加了值?

添加其余代码,我主要关心的是“CNodo”对象。

干杯

using System;
using System.Collections.Generic;
using System.Text;

    namespace Lista_Ligada
    {
        class CNodo
        {
            private int vDato;

            private CNodo vSiguiente = null;

            public int Dato1 
                {

                    get => vDato; 
                    set => vDato = value ;

                }

            internal CNodo Siguiente
                {

                get => vSiguiente;
                set => vSiguiente = value;

                }

            public override string ToString()
            {
                return string.Format("[{0}]", vDato);
            }


            public void TextoPrueba()
            {
                Console.WriteLine("Prueba");
            }



        }
    }

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Lista_Ligada
    {
        class CListaLigada
        {
            private CNodo   Ancla;
            private CNodo   Trabajo ;   
            private CNodo   Trabajo2;

            public CListaLigada()
            {

                Ancla = new CNodo();
                Ancla.Siguiente = null;

            }

            public void Transversa()
            {
                Trabajo = Ancla;
                Console.WriteLine("El ancla tiene un valor de Siguiente de {0}", Trabajo.Siguiente);
                Console.WriteLine("El ancla tiene un valor de Dato de {0}", Trabajo.Dato1);

                while (Trabajo.Siguiente != null)
                {
                    Trabajo = Trabajo.Siguiente ;
                    int D   = Trabajo.Dato1     ;
                    Console.WriteLine("{0}", D) ;
                    Console.WriteLine("{0}", Trabajo.Siguiente);              
                }

                Console.WriteLine();    

            }

            public void Adicionar(int pDato)
            {
                Trabajo = Ancla;

                while (Trabajo.Siguiente != null)
                {
                    Trabajo = Trabajo.Siguiente;
                }

                CNodo Temp = new CNodo();  // ? 

                Temp.Dato1      = pDato;
                Temp.Siguiente  = null;

                Trabajo.Siguiente = Temp;       

            }


        }
    }
using System;

namespace Lista_Ligada
{
    class Program
    {
        static void Main(string[] args)
        {
            CListaLigada MiLista = new CListaLigada();

            CNodo Txt = new CNodo();

            MiLista.Adicionar(19);
            MiLista.Adicionar(3);
            MiLista.Adicionar(5);
            MiLista.Adicionar(7);
            MiLista.Adicionar(7);
            MiLista.Adicionar(5);
            MiLista.Adicionar(3);
            MiLista.Adicionar(1);
            MiLista.Adicionar(0);

            MiLista.Transversa();

            Txt.TextoPrueba();


            MiLista.Transversa();


        }
    }
}

标签: c#visual-studiogetter-setter

解决方案


类不是对象的实例——类描述了对象的行为方式和存储的数据。如果你有一个类,它是这样声明的:

    class MyClass
    {
        MyClass nextNode;
    }

这意味着,这个类的一个实例将包含一个对它内部同一个类的对象的引用。要创建一个类的实例,您可以使用关键字newfe 调用构造函数:

MyClass instance = new MyClass()

现在您的记忆中有一个类的实例,并且instance是对它的引用。你必须明白,nextNode里面instance不是一个对象——它是一个对象的引用。因此可以编写以下行:

    instance.nextNode = instance; //this will assign the same reference to nextNode as instance
    instance.nextNode = new MyClass(); //this will assign a reference to a different object with the same type MyClass

下图大致描述了引用和对象的存储位置

在此处输入图像描述

链表的概念强烈依赖于这种逻辑,因为您不会将对象存储在对象内部 - 您存储引用

在此处输入图像描述

此外,你最好用更少的代码创建更容易理解的问题而不是大问题,这很难理解


推荐阅读