2014-10-16 1 views
1

잠시 동안이 주제를 연구했습니다. 나는 아직 단호한 결론에 도달했습니다.노드를 몇 번 방문했는지 추적하십시오.

노드를 두 번 링크드 목록에 방문한 횟수를 어떻게 추적합니까? 예를 들어

:

의 우리가 몇 노드를 입력하고 각 노드가 char 형의 값을 보유하고 있다고 가정 해 봅시다.

사용자는 방문하려는 노드의 값을 입력합니다.

사용자는 'b', 'b', 'c' 'b', 'a', 'a'를 입력합니다.

이제 'b'가 (가) 세 번 방문되었습니다.

이제 b가 가장 많이 방문한 노드이므로 해당 노드를 맨 앞으로 이동하려고합니다.

노드를 앞쪽으로 이동하는 것은 쉽지만 노드를 추적하는 방법은 잘 모릅니다.

도움을 주시면 감사하겠습니다. 링크 된 목록에서 모든 정렬 당신은 지속적으로 카운트 확인해야 0으로 계산, 또한

struct node 
{ 
char alpha; 
int count; 
struct node *next; 
} 

사용자가 설정 한 것 생성자를 정의 -을 :

+0

여기서 해결해야 할 더 큰 문제는 무엇입니까? 이중 연결리스트가이 데이터 구조에 적합한 지 확신합니까? – acushner

+0

실제 세계에서 무언가가 얼마나 자주 사용되는지 추적하는 방법은 무엇입니까? 당신은 재고 추적 시스템을 추가 할 것입니다 ... –

+0

@ acushner 음, 그래, 나는 그것을 사용해야하기 때문에 확신합니다. 내가하고있는 일은 맞춤법 검사 프로그램을 만드는 것이다. 사용자가 문장을 입력하면 내 프로그램의 철자가 틀린 경우 프로그램에서이를 수정합니다. 빠른 방문을 위해 가장 많이 방문한 단어가 앞에 표시되도록 노력하고 있습니다. 어느 정도는 자기 조직적인 이중 연결 목록입니다. – MipsMoreLikeWhips

답변

3

당신은 다음과 같이 노드 카운트 필드를 추가 할 수 있습니다 입력.

한 가지 확실한 점은이 문제에 대한 데이터 구조가 매우 좋지 않다는 것입니다.

은 COMMENT 응답에서 편집 : -

시도 매핑을 std::priority_queue와 우선 순위 단어의 수있을 것입니다 경우. 이것을 구현하기위한 최대 힙을 선택하십시오. 또는 간단하게하기 위해 std::multimap<int, string> (정수 및 단어가 귀하의 단어 임)을 사용할 수도 있습니다.

+0

알다시피, 그것은 가난한 선택입니다. 그래도 이중 연결된 목록을 사용해야합니다. 나는 너가 이것으로 어디로 가고 있는지, 그리고 확실히 도움이되는 것을 본다. 고맙습니다. – MipsMoreLikeWhips

+1

@MipsMoreLikeWhips 환영 메이트 – ravi

+0

나를 혼란스럽게하는 것은 카운트를 호출하는 것뿐입니다. 각 노드에 대해 개수를 0으로 초기화 할 것입니다. 그러나 방문 할 때마다 증가 할 때 Node-> count ++라고 말하면됩니다. 그게 합법적인가? – MipsMoreLikeWhips

관련 문제