2011-12-11 6 views
0

기본 OOP C++ 과정을위한 프로젝트를 작성 중입니다. 나는 타입 Media (그리고 유래 물 Book, Movie, Album)의 객체 세트를 구현해야한다. 이러한 집합에 대한 연산은 요소 추가, 특정 요소 제거 (반드시 첫 번째 또는 마지막 일 필요는 없음), 집합을 통한 검색 (검색은 여러 결과를 반환 할 수 있음)입니다. 정렬은 필수는 아니지만 좋은 추가라고 생각했습니다.이 데이터의 데이터 구조는 무엇입니까?

궁금한데, 어떤 것이 최상의 데이터 구조입니까? 간단한 배열, 벡터 또는 목록? (구현을 작성해야하며 표준 클래스를 사용할 수 없음을 알아 두십시오.) 큰 데이터 세트를 다루지 않기 때문에 실제로 효율성이나 메모리 소비가 염려되지는 않지만 여전히 할 수 있어야합니다. 왜 하나의 특정 데이터 구조를 선택했는지 설명하십시오.

나는 목록이 항목을 제거하고 추가하는 데 더 좋을 것이라고 생각했지만 벡터에는 색인 배열을 반환 할 수있는 검색 기능에 유용 할 수있는 색인 연산자 []가 있습니다.

+0

흠, 너는 방랑하고 있었다? : P –

+4

@TonyTheLion : 예, 그는 걸어 돌아 다니고 있었지만, 나는 그를 "궁금해"하게 만들었습니다 : P – Nawaz

+0

당신은 옳은 길인 것 같습니다. [Linked Lists] (http://en.wikipedia.org/wiki/Linked_list)와 [Hash Tables] (http://en.wikipedia.org/wiki/Hash_table) –

답변

0

가정 일은 처음에는 간단한 연결 목록을 사용하는 것이 좋습니다. 검색을 위해 찾은 항목의 포인터 또는 반복자 (List 클래스가 STL 컨테이너와 호환 가능)를 반환 할 수 있습니다. 그리고 당신의 경우에는 여러 개의 하위 클래스가 있습니다. 기본 클래스의 포인터 인 - 미디어를 컨테이너에 넣어야 할 수도 있습니다. 그렇다면 메모리를 관리하는 방법을 고려해야합니다. 예 : 요소가 제거되면 메모리를 확보하십시오.

0

아무 것도 신경 쓰지 않는다면, 단순히 two dimensional array 또는 linked list을 사용하면 어떨까요? 나는이 상황에서 가능한 한 최선이라고 생각한다.

0

목록으로 구현했습니다. 이진 트리로 구현되었습니다.
검색 기능의 경우 포인터 배열을 반환 할 수 있습니다.

0

효율성이나 메모리 소비에 신경 쓰지 않는다면 가장 간단한 구현 인 배열을 선택해야합니다. 마지막에 새 항목을 삽입하고 배열의 마지막 항목을 간격으로 이동하여 항목을 삭제합니다. 전체 배열을 반복하여 검색합니다.

효율성에 신경 쓰면 해시 테이블 또는 균형 트리를 구현할 수 있습니다.

0

귀하의 경우에 가장 적합한 컨테이너는지도라고 생각합니다. 각 미디어에는 책의 ISBN과 같은 미디어의 핵심 인 ID가 있으므로지도와 정확히 같은 ID로 두 권의 책을 보관할 수 없습니다.

관련 문제