2012-02-06 2 views
0

저는 Colorado Mesa University의 Csci 학생입니다. 부서 헤드는 연결리스트를위한 접지 방법을 가르친다 :
접지 된 목록을 사용하는 것이 더 나은가요?

struct nodeType 
{ 
    int id; 
    nodeType *link; 
}; 

void createList(nodeType *&head, nodetype *&tail) 
{ 
    head = new nodetype; 
    tail = new nodetype; 
    head->id=-1; //some initialize value 
    head->link=tail; 
    tail->link=NULL; 
} 

void insertList(nodeType *&head, nodeType *&tail) 
{ 
    nodetype *knew,*prior, *next; 
    knew = new nodetype; 

    knew ->name = name 

    prior = head; 
    next = head->link; 
    while(next != tail && knew->id > next->id) 
    { 
     prior = next; 
     next = next->link; 
    } 

    prior->link = knew; 
    knew->link = next; 
} 

그녀는이 분명한 이유 가르친다. 머리와 꼬리가 접지 된 상태에서 위의 함수를 호출 할 때 삽입하는 것이 더 쉽습니다. 그런 다음이 두 노드 안에 모든 데이터를 추가하는 함수를 작성하면 삭제 기능을 작성할 때 머리를 삭제하지 않기 때문에 약간 쉽습니다. 또는 꼬리가있어 목록을 잃어 쓰레기가 생기는 것을 어렵게 만듭니다.

내 알고리즘 교수는 "현실 세계에서"비 접지리스트가 더 나을 것 다른 곳에서 나는 목록을 발생하는 것을 말한다. STL과 인터넷을 사용하는 다른 언어에서는 머리와 꼬리를 구현하는 목록 기능을 찾지 못했습니다.

저는 교수님이 현실 세계라고 생각하는 것이 아니라 실제 현실 세계에서 프로그래밍을 준비하고 싶습니다. 그래서 제 질문은 이것입니다 : 어느 것이 든 더 쉽게 찾을 수있는 것을 사용하는 것이 더 좋습니까? , 또는 두 문제를 염두에두고 각 문제에 접근하고 있습니까?

날이 불화를 해결할 수 있도록 시간에 미리 감사드립니다. "현실 세계"그건 그냥 구현 세부 사항이기 때문에, 당신은 다른 프로그래머가 설계, 구현, 최적화 및 테스트 한 것을 목록을 사용하고, 당신이 이제까지는 "접지"되어 ​​있는지 여부를 알 수 없습니다에서

+1

봐는 하나 더 문제를 해결하는 데 도움이 될 것입니다. 여러 번 당신은 항상 꼬리에 대해 알 필요가 없습니다. 당신이하는 다른 시간. 개인적으로 필자는 몇 년 후에 "실제 세계에서"연결된 목록을 사용하지 않았으므로 둘 중 하나를 필요로하지 않을 수도 있습니다. :) – cHao

+1

현실 세계에서 프로그래밍. 필자는 25 년 동안의 상업적 코딩에서 링크드리스트를 구현했으며 실수로 판명되었습니다. 대답은 귀하의 과제를 표시하는 것이 원하는대로하십시오. 라 라 땅 밖에서, 당신은 단지 맞는 기존의 지시를 받거나, 그것이 할 때까지 큰 망치를 사용한다. :( –

+2

참고로,하지만, (1) "접지"방법은 나에게 오히려 이상한 보이는 것으로, 하나를 사용하는 경우. 그것은 ++ C를 만약 (2), 그 함수가 존재하지 않아야합니다. 헤드/테일 포인터는 숨겨져 야 (3) 그 코드가 진짜 코드라면 틀린 것입니다. 머리와 꼬리를 다시 보지 않게 될 것입니다. 왜냐하면 여러분이 로컬 'head'와 'tail'에 재 할당하기 때문입니다. – cHao

답변

0

. 당신의 알고리즘 과정에서 멀리하는 것이 중요 무엇

은 다음과 같습니다

  • 성능 특성. 링크드리스트 나 벡터가 더 빠른 랜덤 액세스를 가지고 있습니까? 빨리 추가 하시겠습니까? 첫 번째 요소를 빨리 제거 하시겠습니까? 올바른 컨테이너를 사용하는 것은 조숙하지 않은 최적화입니다. 혹시 디버거를 사용하여 코드를 단계별로해야하는 경우, 당신이 왕으로 혼동하지 않도록 충분히 다른 구현 스타일을보고

  • . at-end-of-list 테스트 리턴이 true이지만 다음 노드 포인터가 NULL이 아닌 것을 본 경우 이전에 "접지 된"리스트 구현을 본 적이 없다면 아마 혼란 스러울 것입니다.

+0

IE STL 목록이나 내가 일하는 곳마다 내부적으로 개발 된 목록을 사용할 가능성이 가장 높습니까? 알았어, 고마워! 내가 대리인이 있다면 나는 투표 할거야. ^^; –

+0

@ AndrewQ : 맞아. 아주 소수의 프로그래머 만이 라이브러리 개발에 참여하고 실제로 이러한 데이터 구조를 구축합니다. 다른 사람들은 모두 사용합니다. –

+0

감사! 이제 저는 수학에 접근하는 것처럼이 수업에 접근 할 것입니다. 수업에서 자신의 방식으로 수업에서 벗어나 수업에 참여하십시오. –

관련 문제