2014-12-24 3 views
0

배열과 링크 된 목록을 클래스에서 배운 후에 배열을 사용하여 링크 된 목록을 만들 수 있는지, 그리고 그 반대의 경우도 마찬가지입니다.링크 된 목록을 사용하여 배열 구현하기 (반대의 경우도 마찬가지 임)

  1. 는 I 등등 배열의 인덱스 1에서 다음 노드로 배열, 포인터 인덱스 0 링크드리스트의 제 1 값을 저장하고, 수 배열을 이용하여 링크리스트를 만들? 나는 다음 노드의 값을 저장하는 인덱스가 항상 존재한다는 것을 알기 때문에 "next to pointer"가 중복 된 것처럼 보이기 때문에 혼란스러워 보입니다. 현재 노드의 값을 나타내는 인덱스가 2가됩니다. 배열은 연속적인 메모리를 포함하지만 링크 된 목록은 노드가 컴퓨터 메모리의 다른 부분에 저장 될 수 있기 때문에 연결된 목록을 사용하여 배열을 만들 수 있다고 생각하지 않습니다. 이 문제를 해결할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

0

링크 된 목록을 배열에 저장할 수는 있지만 순서가 지정된 목록이 있다는 의미에서만 가능합니다. 알다시피, 순서를 아는 것처럼 포인터는 필요하지 않습니다 (배열 순서에서 명시 적입니다). 배열 또는 링크 된 목록 사이의 주요 차이점은 다음과 같습니다.

  • 배열은 요소가 고정되어 있다는 점에서 "정적"입니다. 요소를 제거 할 수 없으며 배열에서 다음 요소를 자동으로 뒤섞어 씁니다. 물론 반복에서 "비어있는"요소를 우회 할 수 있습니다. 특정 요소가 필요합니다. 연결된 목록에서 요소를 제거하면 제거됩니다. 배열을 사용하면 모든 후속 요소들을 뒤집어서셔야합니다.
  • 이와 같이 링크 된 목록은 요소 삽입/삭제가 가장 일반적인 활동 인 경우 자주 사용됩니다. 배열은 액세스가 요구 될 때 가장 자주 사용됩니다 ([인덱스에 따라] 직접 액세스하는 것보다 빠름).
  • 배열 위에 링크 된 목록의 이점을 볼 수있는 또 다른 영역은 정렬입니다 (정렬이 필요하거나 빈번한 경우). 링크 된 정렬 정렬은 포인터 조작 만 필요로하는 반면 Aray 정렬은 스와핑 및 셔플 링이 필요하기 때문입니다. 즉, 많은 정렬 알고리즘이 새로운 배열을 만듭니다 (병합 정렬이 일반적 임).이 오버 헤드가 줄어 듭니다 (정렬 된 배열에 대해 동일한 메모리가 다시 필요함).
  • 예를 들어, 링크 된 목록을 "읽기 전용"으로 설정할 수있는 경우, 은유를 다소 혼합 할 수 있습니다. 즉, 연결된 목록의 각 노드에 대한 포인터 배열을 만들 수 있습니다. 그렇게하면 링크 된 목록에 대한 색인 된 액세스 권한을 가질 수 있습니다. 요소가 링크 된 목록에 추가되거나 제거되면 배열은 (위에 설명 된 방식으로) 오래된 것이됩니다 (따라서 읽기 전용 측면).

그래서, 특정 질문에 대답 :이 일에 값이 없습니다

1) - 세부 사항에 따라)

2 위의 당신은 정말 질문에 대답 할 수있는 충분한 정보를 제공하지 연속적인 메모리 할당. OS, 아키텍처, 컴파일러 구현 등 많은 부분에 달려 있습니다. 프로그래밍 언어에 대해서도 언급하지 않았습니다. 간단히 말해, 링크 된리스트와 배열 사이의 선택은 인접한 메모리 할당과 관련이 없으며 사용법과 더 관련이 있습니다. 예를 들어, java LinkedList 클래스와 ArrayList 클래스는 모두 List 구현을 나타내지 만 사용 패턴에 따라 특수화됩니다.LinkedList은 높은 수정을 기대하는 "목록"에 대해 더 나은 성능을 발휘할 것으로 예상됩니다 (몇 년 전에 테스트 한 결과 이것은 무시할 수있는 것으로 입증되었지만 최신 버전의 Java에서는 확실하지 않습니다).

또한 일반적으로 "연결된 목록이있는 배열 만들기"또는 그 반대로는하지 않습니다. 둘 다 더 큰 구성 요소를 작성하는 데 사용되는 추상적 인 데이터 구조입니다. 그것들은 더 넓은 맥락에서 무언가의 목록을 나타냅니다 (예를 들어, 부서에는 종업원들의 목록이 있습니다). 각 데이터 유형에는 사용상의 이점이 있습니다. 마찬가지로 집합, 대기열, 스택 등을 사용할 수도 있습니다. 사용 용도에 따라 다릅니다.

나는 너를 더 혼란스럽게 생각하지 않았 으면 좋겠다.

enter image description here

혜택 :

0

배열 기반의 연결리스트는 일반적으로 무언가 같이, 2 dimentional 배열에 정의 된 목록은 처음에 정의 된 메모리의 특정 금액이 소요됩니다.

아래쪽 : 목록에는 미리 정의 된 특정 양의 항목 만 포함될 수 있습니다.

단일 링크 된 목록으로 데이터 구조는 헤드 포인터를 보유해야합니다. 이 데이터 구조는 헤드 포인터를 보유하지만,이 특정 구현에서는 int입니다. 리스트의 선두는 최초의 노드에 인덱스를 보관 유지하는 포인터입니다. 첫 번째 노드는 다음 노드에 인덱스를 보유하는 식으로 계속됩니다. 목록의 마지막 노드는 다음 값 -1을 보유합니다. 이것은 목록의 끝을 나타냅니다. 요소가 요소에 추가 될 때 인덱스를 사용한다는 사실은 자유 목록 머리를 요구합니다. 이 무료 목록은 동일한 2-dementional 배열에 통합됩니다. 머리가 int 인 것처럼 무료 목록 포인터는 int입니다.

enter image description here

이제 데이터 구조는 3 대 요소 퇴비화된다. 헤드 포인터, 자유 헤드 포인터 및 2 차원 배열. 목록을 사용할 수 있으려면 목록을 올바르게 초기화해야합니다. 목록은 다음과 같이 초기화되어야합니다.

enter image description here

참조이 link

이다
관련 문제