데이터 구조 학습: JavaScript를 사용하여 연결 목록 작업 구현(자세한 예)

WBOY
풀어 주다: 2021-12-24 18:04:26
앞으로
2939명이 탐색했습니다.

이 기사는 JavaScript를 사용하여 데이터 구조 학습에서 연결 목록을 구현하는 방법에 대한 관련 지식을 제공합니다. ㅋㅋㅋ C 언어와 같이 동적으로 추가됨)

데이터 구조 학습: JavaScript를 사용하여 연결 목록 작업 구현(자세한 예)헤드 노드가 필요함

    다음 노드의 주소를 알아야 함
  • 연결 리스트의 각 노드를 객체로 생각하면 됩니다. 이 객체에는 두 가지 속성이 있는데, 하나는 노드의 값이고, 하나는 노드의 다음 노드의 주소입니다(이중 연결 리스트인 경우 이전 노드 주소의 속성도 추가해야 합니다)
  • 구현 노드 추가 작업:

1 at the tail node 노드 추가

 //在尾节点处添加节点
        function append(element){
        let node = new node(element);
        let current;
        if(head == null){
            current = node
        }else{
            while(current.next){
                current = current.next;
            }
            current.next = node
        }
            length++;
        }
로그인 후 복사

코드 분석:

들어오는 요소를 기반으로 노드 정의, 이 노드의 값으로 사용됨

Define 현재 노드를 나타내는 변수

헤드 노드가 있는지 확인합니다. 헤드 노드가 없으면 연결된 목록에 값이 없음을 나타내고, 그렇지 않으면 전달된 값이 헤드 노드로 사용됩니다. 연결된 목록을 탐색하고 마지막 노드를 찾은 후 다음 속성이 새 노드에 할당됩니다.

연결된 목록의 길이 + 1

    2. 임의 위치에 노드를 추가합니다.
  • 분석
  • :
  • 이 위치에 있는 이전 노드의 다음 속성을 이 노드에 할당하고, 원래의 다음 노드를 저장한 후 현재 노드의 다음 속성에 할당합니다.
  • function insert(position,element){
            let node = new Node(element);
            let current = head;
            let previous;//当前节点的前一个节点,在position处添加节点,就是在previos和current之间添加
            if(position = 0){
              node.next = head;
              head = node;
            }else{
              for(let i = 0;i< position;i++){
                pervious = current;
                current = current.next;
              }
    
              pervious.next = node;
              node.next = current;
            }
            length++;
            return true;
          }
    로그인 후 복사
  • 코드 분석:

위치가 범위를 벗어났는지 확인하세요. 그렇지 않은 경우 노드를 만듭니다

현재 노드를 나타내는 변수를 정의하고 이를 헤드 노드로 초기화합니다. 즉, 변수는 현재 노드의 이전 노드를 나타냅니다. 노드의 기능은 찾기를 용이하게 하는 것입니다. 노드

를 삽입할 때 이전 노드를 헤드 노드 앞에 추가할지 여부를 결정합니다. 그렇다면 헤드 노드를 노드의 다음 속성에 할당하고, 그렇지 않으면 헤드 노드를 이 노드로 변경합니다. 노드, 이 위치의 노드 앞에 노드를 삽입하세요

링크드 리스트의 길이 +1

  • 노드를 삭제하는 연산을 구현하려면
  • 분석: 노드를 삭제하는 연산 대상 노드 앞의 노드를 삭제하는 것입니다. 포인터는 대상 노드

1. 지정된 노드를 삭제합니다

function removed(element){
    
      let node = new Node(element);
      let pervious;
      let nextNode;
      let current = head;

    if(head != null){
      while (current != node){
        pervious = current;
        current = current.next;
        nextNode = current.next;
      }  

      pervious.next = nextNode;
      length--;
      return true;
    }else{
      return false;
    }    
    }
로그인 후 복사

2. 지정된 위치의 노드를 삭제합니다. the node

분석: 노드를 쿼리하는 것은 노드를 삭제하는 것과 유사합니다. 둘 다 순회를 통해 해당 노드 또는 해당 위치를 찾은 다음 작업을 수행합니다

1.

어느 노드가 특정 위치인지 쿼리

function removedAt(position){
        let current = head;
        let pervious;
        let nextNode;
        let i = 0;

        while(i < position){
          pervious = current;
          current = current.next;
          nextNode = current.next;
        }

        pervious.next = nextNode;
        length--;
        return true;
      }
로그인 후 복사

2. 특정 노드의 위치를 ​​쿼리

function searchElement(element){
      //输入元素,找到该元素后返回该元素的位置
      if(head != null){
        let node = new Node(element);
        let current;
        let index = 0;
        if(head == node){
          return 0;
        }else{
          current = head;
          while(current != node){
            current = current.next;
            index++;
          }
          return index;
        }
      }else{
        return -1;
      }
    }
로그인 후 복사

아이디어 요약

연결 목록에 대해 더 많은 작업이 있습니다. 더 복잡한 연결 목록에는 이중 연결 목록(노드 초기화 시 이전 노드 추가)과 순환 연결 목록( 꼬리 노드의 다음 노드는 헤드 노드입니다.) 이러한 연결 목록 작업은 js를 사용하여 구현할 수도 있습니다. 여기서는 말할 것도 없습니다. 정리하자면 연결리스트의 핵심은 연결리스트의 노드가 두 개의 속성값을 갖는 객체로 간주될 수 있다는 점인데, 하나는 노드 값이고 다른 하나는 포인터이다. 연결리스트의 추가 및 삭제는 변경을 의미한다. 연결리스트 검색시 핵심은 current = current.next

입니다. 【관련 추천 :

javascript 학습 튜토리얼

위 내용은 데이터 구조 학습: JavaScript를 사용하여 연결 목록 작업 구현(자세한 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿