c# - 试图理解链表+类概念
问题描述
我正在研究 C# 中的列表,我有一个很大的疑问,您在这里看到,属性“Siguiente”属于同一类的类型,我不明白这如何影响内部代码以及实际意味着什么,列表有效,即属性用于在列表中创建指针。我的疑问是
- 在哪个方面它会影响在同一类中具有该类类型的变量?
- 系统如何知道这是一个指针?
- 是否在“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();
}
}
}
解决方案
类不是对象的实例——类描述了对象的行为方式和存储的数据。如果你有一个类,它是这样声明的:
class MyClass
{
MyClass nextNode;
}
这意味着,这个类的一个实例将包含一个对它内部同一个类的对象的引用。要创建一个类的实例,您可以使用关键字new
fe 调用构造函数:
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
下图大致描述了引用和对象的存储位置
链表的概念强烈依赖于这种逻辑,因为您不会将对象存储在对象内部 - 您存储引用
此外,你最好用更少的代码创建更容易理解的问题而不是大问题,这很难理解
推荐阅读
- asp.net-core - 如何在服务器的 Asp.Net Core Web API 中处理自定义异常
- python - 查找图像中检测到指定颜色的坐标
- react-native - 错误:命令失败:gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
- python - Snowboy 启动指令检测和 Raspberry Pi:IOError:[Errno -9997] 无效采样率
- assembly - 我应该在固件中填写多少异常向量?
- javascript - Puppeteer TimeoutError:超过 30000 毫秒的导航超时
- dompdf - Laravel 6 barryvdh / laravel-dompdf 渲染问题
- javascript - 从 webapp 深度链接到 Google Pay 等 UPI 应用
- django - 仅当值存在于另一个表中时,我如何返回 Django 查询集?
- java - 可以在 webDriver 的不同端口使用当前会话吗?