링크 된 목록을 배열에 저장할 수는 있지만 순서가 지정된 목록이 있다는 의미에서만 가능합니다. 알다시피, 순서를 아는 것처럼 포인터는 필요하지 않습니다 (배열 순서에서 명시 적입니다). 배열 또는 링크 된 목록 사이의 주요 차이점은 다음과 같습니다.
- 배열은 요소가 고정되어 있다는 점에서 "정적"입니다. 요소를 제거 할 수 없으며 배열에서 다음 요소를 자동으로 뒤섞어 씁니다. 물론 반복에서 "비어있는"요소를 우회 할 수 있습니다. 특정 요소가 필요합니다. 연결된 목록에서 요소를 제거하면 제거됩니다. 배열을 사용하면 모든 후속 요소들을 뒤집어서셔야합니다.
- 이와 같이 링크 된 목록은 요소 삽입/삭제가 가장 일반적인 활동 인 경우 자주 사용됩니다. 배열은 액세스가 요구 될 때 가장 자주 사용됩니다 ([인덱스에 따라] 직접 액세스하는 것보다 빠름).
- 배열 위에 링크 된 목록의 이점을 볼 수있는 또 다른 영역은 정렬입니다 (정렬이 필요하거나 빈번한 경우). 링크 된 정렬 정렬은 포인터 조작 만 필요로하는 반면 Aray 정렬은 스와핑 및 셔플 링이 필요하기 때문입니다. 즉, 많은 정렬 알고리즘이 새로운 배열을 만듭니다 (병합 정렬이 일반적 임).이 오버 헤드가 줄어 듭니다 (정렬 된 배열에 대해 동일한 메모리가 다시 필요함).
- 예를 들어, 링크 된 목록을 "읽기 전용"으로 설정할 수있는 경우, 은유를 다소 혼합 할 수 있습니다. 즉, 연결된 목록의 각 노드에 대한 포인터 배열을 만들 수 있습니다. 그렇게하면 링크 된 목록에 대한 색인 된 액세스 권한을 가질 수 있습니다. 요소가 링크 된 목록에 추가되거나 제거되면 배열은 (위에 설명 된 방식으로) 오래된 것이됩니다 (따라서 읽기 전용 측면).
그래서, 특정 질문에 대답 :이 일에 값이 없습니다
1) - 세부 사항에 따라)
2 위의 당신은 정말 질문에 대답 할 수있는 충분한 정보를 제공하지 연속적인 메모리 할당. OS, 아키텍처, 컴파일러 구현 등 많은 부분에 달려 있습니다. 프로그래밍 언어에 대해서도 언급하지 않았습니다. 간단히 말해, 링크 된리스트와 배열 사이의 선택은 인접한 메모리 할당과 관련이 없으며 사용법과 더 관련이 있습니다. 예를 들어, java LinkedList
클래스와 ArrayList
클래스는 모두 List
구현을 나타내지 만 사용 패턴에 따라 특수화됩니다.LinkedList
은 높은 수정을 기대하는 "목록"에 대해 더 나은 성능을 발휘할 것으로 예상됩니다 (몇 년 전에 테스트 한 결과 이것은 무시할 수있는 것으로 입증되었지만 최신 버전의 Java에서는 확실하지 않습니다).
또한 일반적으로 "연결된 목록이있는 배열 만들기"또는 그 반대로는하지 않습니다. 둘 다 더 큰 구성 요소를 작성하는 데 사용되는 추상적 인 데이터 구조입니다. 그것들은 더 넓은 맥락에서 무언가의 목록을 나타냅니다 (예를 들어, 부서에는 종업원들의 목록이 있습니다). 각 데이터 유형에는 사용상의 이점이 있습니다. 마찬가지로 집합, 대기열, 스택 등을 사용할 수도 있습니다. 사용 용도에 따라 다릅니다.
나는 너를 더 혼란스럽게 생각하지 않았 으면 좋겠다.
혜택 :