단일 체인 테이블을 만듭시다
15247 단어 datastructureslinkedlist
오늘 나는 어떻게 간단한 단일 체인 테이블을 만드는지 중점적으로 소개할 것이다.체인 테이블은 일련의 상호 연결된 데이터를 포함하는 데이터 구조이다.링크의 모든 요소는 하나의 값과 링크의 다음 요소에 대한 인용을 포함할 수 있습니다.우리는 노드의 원소라고 부른다.
링크 목록을 다음 그림으로 표시할 수 있습니다.마지막 노드를 제외하고는 모든 노드가 다음 노드를 가리키는 것을 볼 수 있다.
시작 노드를 헤드 노드라고 하고 마지막 노드를 꼬리 노드라고 한다.앞에서 설명한 바와 같이 모든 노드는 데이터와 다음 인용을 저장할 수 있다.만약 우리가 세 번째 노드에 가고 싶다면, 우리는 첫 번째 노드부터 시작해서 세 번째 노드까지 쭉 가야 한다.
좋습니다. 체인 테이블을 작성하기 시작합시다. (저는 여기서 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
인터페이스를 사용하고 있다.이렇게 하면 우리는 내장된 매거 기능을 이용할 수 있다.다음에 우리는 공공 두미 속성을 추가할 것이다.이것들을 사용하면 우리는 체인표의 시작과 끝을 수시로 되돌릴 수 있다. 이것들은 모두 공공 변수이다.그 밖에 우리는 두 개의 사유 변수
head
와 tail
를 가지고 내부에서 노드를 보존하는 데 사용한다.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 = 0
head
와 tail
는 null
이다.Count
도0
.따라서 // 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=0
와 head
는 tail
와 같다.null
코드 블록에서 우리는 현재 헤더를 //A
변수에 분배한다. 이때는 temp
이다.그리고 새 노드를 만들어서 이 값을 분배하고 null
에 분배합니다.따라서 우리가 실행하면head
우리의 최신 가치가 영원히 머릿속에 있다는 것을 의미한다.그리고 우리의 이전 노드는 //B
의 head
에 분배될 것이다.이때//D 블록이 실행되고 초기 값이
Next
에 할당됩니다.Keep note that this will be only executed when
i=0
우리 그림으로 보여 줍시다.
언제
tail
지금은 재미있는 부분이 생겼다.우선, 우리는 현재 헤더를 임시 변수에 분배할 것이다.i = 1
변수 중 하나head
만 포함됩니다.그리고 우리는 새 노드를 만들고 그것을 node
에 분배했다.그리고currenthead
의Next는temp변수를 분배합니다.머리에 항상 최신 변수가 있기 때문이다.그것을 찍읍시다.
언제
head
i=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--;
}
}
나는 이것이 단일 체인 테이블에서 포괄해야 할 모든 주제를 포괄하기를 바란다.너희들이 중학교에서 뭔가를 배울 수 있기를 바란다.나는 여기서 이 문장을 끝낼 것이다.궁금한 점이 있으시면 여기에 메시지를 남겨 주십시오.그리고 나는 내 이해에 따라 썼다.그러니 조금이라도 잘못이 있다면 주저 없이 바로잡아 주세요.정말 고마워요.
오늘 친구들한테 주는 거야.곧 뵙기를 기대합니다.감사합니다.
Reference
이 문제에 관하여(단일 체인 테이블을 만듭시다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rasikag/let-s-create-a-singly-linked-list-166l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)