요소의 저렴한 삽입 및 삭제를 원할 때와 요소가 메모리에서 서로 나란히 상관되지 않는 경우에는 연결된 목록을 사용할 수 있습니다.
이것은 매우 추상적이며 배열 대신 연결된 목록을 사용해야하는 이유에 대한 구체적인 설명을 원합니다. 나는 프로그래밍 경험이 많지 않아서 실제 경험이 많지 않다.
요소의 저렴한 삽입 및 삭제를 원할 때와 요소가 메모리에서 서로 나란히 상관되지 않는 경우에는 연결된 목록을 사용할 수 있습니다.
이것은 매우 추상적이며 배열 대신 연결된 목록을 사용해야하는 이유에 대한 구체적인 설명을 원합니다. 나는 프로그래밍 경험이 많지 않아서 실제 경험이 많지 않다.
답변:
여기 예제와 비유 사이에 어떤 부분이 있습니다. 심부름을해야하므로 종이 한 장을 잡고 다음과 같이 작성하십시오.
그런 다음 우표도 사야한다는 것을 기억합니다. 당신의 도시의 지리 때문에, 당신은 은행 후에 그것을해야합니다. 전체 목록을 새 종이에 복사 할 수 있습니다.
또는 당신이 가진 것에 낙서 할 수 있습니다 :
다른 심부름을 생각할 때 목록의 맨 아래에 쓰면되지만 화살표를 사용하여 자신에게 어떤 명령을했는지 알려주십시오.이 목록은 링크 된 목록입니다. 무언가를 추가 할 때마다 전체 목록을 복사하는 것보다 빠르고 쉽습니다.
그런 다음 은행에있는 동안 휴대 전화가 울립니다. "이봐, 나는 우표를 받았는데, 더 이상 줍지 마." STAMPS를 목록에서 벗어나면 STAMPS가없는 완전히 새로운 것을 다시 쓰지 않습니다.
이제 코드로 심부름 목록을 구현할 수 있습니다 (지리를 기반으로 심부름을 순서대로 배치하는 앱일 수 있음). 실제로 코드에서 링크 된 목록을 사용할 가능성이 높습니다. 많은 항목을 추가 및 제거하고 주문이 중요하지만 각 삽입 또는 삭제 후에 전체 목록을 다시 복사하지 않으려 고합니다.
C 언어 "호출 스택"은 x86 (및 대부분의 다른) 이진 API에서 링크 된 목록 으로 구현됩니다 .
즉, C 언어 프로 시저 호출은 선입 선출 방식을 따릅니다. (재귀 적) 함수 호출을 실행 한 결과를 "호출 스택"또는 때로는 "스택"이라고합니다.
CALL
x86 명령어는 "호출 스택"을 사용하여 링크 된 목록을 implmenting 끝납니다. CALL
명령 % EIP 레지스터의 내용, 상기 명령의 어드레스 가압 후CALL
위에 적층 메모리. 호출 된 프롤로그는 호출 함수에서 로컬 변수의 가장 낮은 주소 인 % EBP 레지스터의 내용을 스택 메모리로 푸시합니다. 그런 다음 호출 된 함수 프롤로그는 % EBP를 현재 함수의 스택 기반으로 설정합니다.
이는 % EBP가 호출 함수의 % EBP 값의 주소를 보유하는 메모리 위치에 대한 포인터임을 의미합니다. 이는 링크 된리스트에 지나지 않으며, 하드웨어를 통해 부분적으로 구현됩니다 CALL
.
이것이 좋은 점은 x86 CPU가 함수 호출을 구현하는 방법, 특히 함수에 자체 인수 사본이있는 함수 호출 및 함수의 로컬 변수입니다. 모든 함수 호출은 "호출 스택"에 대한 일부 정보를 푸시하여 호출 된 함수 또는 호출 함수의 간섭없이 CPU가 호출 함수에서 중단 된 부분을 가져올 수 있도록합니다.
연결된 목록을 사용하여 메시지 큐를 구현할 수 있습니다.
메시지 큐는 나중에 처리하기 위해 이벤트에 대한 정보를 저장하는 구조입니다. 예를 들어, 사용자가 키를 누르거나 마우스를 움직이면 이것은 이벤트입니다. 이벤트가 발생하는 순간에 응용 프로그램이 사용 중일 수 있으므로 이벤트가 발생하는 정확한 순간에 이벤트를 처리 할 수 없습니다. 따라서 이벤트는 메시지 큐 (키를 눌렀거나 마우스가 이동 한 위치에 대한 정보)에 배치되고 응용 프로그램에 여유 시간이 있으면 메시지 큐를 확인하고 이벤트 큐에서 이벤트를 가져 와서 처리합니다. 그들. (이것은 밀리 초의 시간 프레임 내에서 발생하므로 눈에 띄지 않습니다.)
방금 설명한 사용 시나리오에서 메시지 큐에 저장된 이벤트에 무작위로 액세스하지 않아도됩니다. 우리는 메시지를 저장하고 검색 할 수 있기만합니다. 따라서 최적의 삽입 / 제거 시간을 제공하는 연결된 목록을 사용하는 것이 좋습니다.
(메시지 대기열이 순환 배열 목록을 사용하여 구현 될 가능성이 높거나 거의 가능성이 있음을 지적하지 마십시오. 기술적 인 세부 사항이며 제한 사항이 있습니다. 제한된 수의 메시지)