단일 체인 테이블을 만듭시다

이 게시물은 최초로 나의 블로그 사이트에 발표되었는데, 너는 찾을 수 있다here
오늘 나는 어떻게 간단한 단일 체인 테이블을 만드는지 중점적으로 소개할 것이다.체인 테이블은 일련의 상호 연결된 데이터를 포함하는 데이터 구조이다.링크의 모든 요소는 하나의 값과 링크의 다음 요소에 대한 인용을 포함할 수 있습니다.우리는 노드의 원소라고 부른다.
링크 목록을 다음 그림으로 표시할 수 있습니다.마지막 노드를 제외하고는 모든 노드가 다음 노드를 가리키는 것을 볼 수 있다.

시작 노드를 헤드 노드라고 하고 마지막 노드를 꼬리 노드라고 한다.앞에서 설명한 바와 같이 모든 노드는 데이터와 다음 인용을 저장할 수 있다.만약 우리가 세 번째 노드에 가고 싶다면, 우리는 첫 번째 노드부터 시작해서 세 번째 노드까지 쭉 가야 한다.
좋습니다. 체인 테이블을 작성하기 시작합시다. (저는 여기서 C#을 사용합니다.)
우선, 데이터와 다음 요소를 저장하기 위해 노드 클래스를 만듭니다.윌 int 데이터 형식을 시작할 것입니다. 이따가 일반적인 데이터 형식을 보존하기 위해 변경할 것입니다.
public class Node
{
    public Node(int value)
    {
        Value = value;
    }

    public int Value { get; set; }
    public Node Next { get; set; }

}
여기에 우리는 데이터를 Value 속성에 저장하고 다음 노드의 대상은 Next 속성에 저장합니다.
이제 우리는 LinkedList 클래스를 만들 수 있습니다.
public class LinkedList: ICollection<int> {
}
우리는 ICollection 인터페이스를 사용하고 있다.이렇게 하면 우리는 내장된 매거 기능을 이용할 수 있다.
다음에 우리는 공공 두미 속성을 추가할 것이다.이것들을 사용하면 우리는 체인표의 시작과 끝을 수시로 되돌릴 수 있다. 이것들은 모두 공공 변수이다.그 밖에 우리는 두 개의 사유 변수headtail를 가지고 내부에서 노드를 보존하는 데 사용한다.
public class LinkedList: ICollection<int>
{
    private Node head
    {
        get;
        set;
    }
    private Node tail
    {
        get;
        set;
    }
    public int Head { get {return head.Value;}}
    public int Tail { get { return tail.Value;}}
    public int Count
    {
        get;
        private set;
    }
}
Count 속성은 ICollection에서 이루어진다.
체인 시계의 가치를 높일 수 있는 두 가지 방법이 있다.우리는 머리에 값을 추가할 수도 있고, 꼬리에 값을 추가할 수도 있다.끝부분에 값을 추가하는 것부터 시작합시다.

끝에 추가


다음은 끝부분에 값을 추가하는 코드입니다.
public void AddTail(int value)
{
    var node = new Node(value);

    if (Count == 0) // A
    {
        head = node;
    }
    else
    {
        tail.Next = node; // B
    }
    tail = node; // C
    Count++;
}
이 코드를 설명해 드릴게요.시범을 보이기 위해서, 우리는 아래의 코드를 가설합시다.
LinkedList linkedList = new LinkedList();
for (int i = 0; i < 5; i++)
{
    linkedList.AddTail(i);
}
언제i = 0headtailnull이다.Count0.따라서 // A 블록에 들어가 머리를 이 노드로 설정합니다.또한 노드에 tail를 설정합니다.

언제i = 1이제 두 번째 Node 변수를 만듭니다.Count는 1이기 때문에 // B 로 이동하고tail의 Next 속성을 이 노드에 설정합니다.이것은 head의 다음 속성도 그렇다는 것을 의미한다.
그리고 tail 변수도 같은 노드를 인용한다.우리 상상을 시작합시다.

꼬리도 머리를 가리킨다.일단 우리i = 1를 새로운 노드로 설정하면 머리tail.Next도 새로운 노드가 된다는 뜻이다.나는 색깔을 추가했고 블록마다 발생한 일에 대해 주석을 달았다.

This is possible because every time we assign a variable to a object, we are passing the reference of that object.


순환이 끊길 때까지는 이런 상황이 발생할 수 없다.내가 그것을 한 폭의 그림으로 그리게 하다.

여기서 언급해야 할 중요한 점은 꼬리 노드의 Next 속성은 시종Next이다.
언제든지 Head 및 Tail 변수는 Head 및 Tail 값을 제공합니다.일단 우리가 끝부분에 값을 추가하면, 대부분의 이성적인 값은 항상 끝부분에 있다.

머리에 덧붙이다


이것은 '끝에 추가하기' 의 상반된 방법이다.일단 우리가 머리에 값을 추가하면 대부분의 이성적인 값이 머리에 있다는 것을 의미한다.최소 원인 값은 끝에 있습니다.
다음은 헤드 방법에 값을 추가하는 코드 블록입니다.
public void AddHead(int value)
{
    Node temp = head; // A
    head = new Node(value); // B
    head.Next = temp; // C
    Count++;
    if (Count == 1)
    {
        tail = head; // D
    }
}
이 코드 블록을 시뮬레이션하기 위해서, 일반적인 null 순환 예시를 사용합니다.
LinkedList linkedList = new LinkedList();
for (int i = 0; i < 5; i++)
{
    linkedList.AddHead(i);
}
언제for이때 우리i=0headtail와 같다.null 코드 블록에서 우리는 현재 헤더를 //A 변수에 분배한다. 이때는 temp이다.그리고 새 노드를 만들어서 이 값을 분배하고 null 에 분배합니다.따라서 우리가 실행하면head 우리의 최신 가치가 영원히 머릿속에 있다는 것을 의미한다.그리고 우리의 이전 노드는 //Bhead에 분배될 것이다.
이때//D 블록이 실행되고 초기 값이 Next에 할당됩니다.

Keep note that this will be only executed when i=0


우리 그림으로 보여 줍시다.

언제tail지금은 재미있는 부분이 생겼다.우선, 우리는 현재 헤더를 임시 변수에 분배할 것이다.i = 1 변수 중 하나head만 포함됩니다.그리고 우리는 새 노드를 만들고 그것을 node 에 분배했다.그리고currenthead의Next는temp변수를 분배합니다.머리에 항상 최신 변수가 있기 때문이다.
그것을 찍읍시다.

언제headi=2일 때도 같은 상황이 발생한다.더욱 또렷해지기 위해서 나는 사진 한 장을 추가할 것이다.

순환이 끝날 때까지 반복됩니다.
이때 우리는 i = 2류에 주요 기능을 추가했다.우리는 단지 for 인터페이스를 실현할 수 있을 뿐이다.
다음은 체인 테이블에서 첫 번째 항목과 마지막 항목을 삭제하는 방법입니다.
public void RemoveFirst()
{
    if (Count != 0)
    {
        head = head.Next;
        Count--;
        if (Count == 0)
        {
            tail = null;
        }
    }
}
public void RemoveLast()
{
    if (Count != 0)
    {
        if (Count == 1)
        {
            head = null;
            tail = null;
        }
        else
        {
            Node current = head;
            while (current.Next != tail)
            {
                current = current.Next;
            }
            current.Next = null;
            tail = current;
        }
        Count--;
    }
}
나는 이것이 단일 체인 테이블에서 포괄해야 할 모든 주제를 포괄하기를 바란다.너희들이 중학교에서 뭔가를 배울 수 있기를 바란다.
나는 여기서 이 문장을 끝낼 것이다.궁금한 점이 있으시면 여기에 메시지를 남겨 주십시오.그리고 나는 내 이해에 따라 썼다.그러니 조금이라도 잘못이 있다면 주저 없이 바로잡아 주세요.정말 고마워요.
오늘 친구들한테 주는 거야.곧 뵙기를 기대합니다.감사합니다.

좋은 웹페이지 즐겨찾기