<p style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:10px;">현재 음원관리프로그램을 짜는중인데 링크드리스트 부분에서 막혀서 3일동안 진전이 없어서</span></p> <p style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:10px;">이렇게 질문을 남깁니다</span></p> <p style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:14px;">어플리케이션 클래스</span></p> <p style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">public:</span></p> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">Application()</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">{</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">m_nCurCommand = 0;</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">GenreType indata;</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">indata.setInfo(1, "발라드");</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">g_List5.Add(indata);</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">indata.setInfo(2, "힙합");</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">g_List5.Add(indata);</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">indata.setInfo(3, "팝송");</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">g_List5.Add(indata);</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">}</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">private:</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">LinkedList<MusicType> m_List;</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">LinkedList<GenreType> g_List;</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;"><br></span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;"><br></span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;"><br></span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:14px;">MusicType class 안에 있는 private</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"> <div><span style="font-size:11px;">int m_id; // 곡번호</span></div> <div><span style="font-size:11px;">string m_music;<span style="white-space:pre;"> </span>//음악명</span></div> <div><span style="font-size:11px;">string m_artist;<span style="white-space:pre;"> </span>//가수</span></div> <div><span style="font-size:11px;">string m_album;<span style="white-space:pre;"> </span>//앨범</span></div> <div><span style="font-size:11px;">string m_genre;<span style="white-space:pre;"> </span>//장르</span></div> <div><span style="font-size:11px;">string m_lyrics;<span style="white-space:pre;"> </span>//가사</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:14px;">GenreType 안에 있는 private</span></div> <div> <div><span style="font-size:11px;">int m_id; // 곡번호</span></div> <div><span style="font-size:11px;">string m_genre;<span style="white-space:pre;"> </span>//음악명</span></div> <div><span style="font-size:11px;">LinkedList<SimpleMusicType> g_List;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:14px;">SimpleMusicType 안에 있는 private</span></div> <div> <div><span style="font-size:11px;">int m_id;<span style="white-space:pre;"> </span>///< Primary key</span></div> <div><span style="font-size:11px;">string m_music;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:14px;">노드 클래스와 링크드리스트 클래스</span></div> <div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">struct NodeType</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">T data;<span style="white-space:pre;"> </span></span></div> <div><span style="font-size:11px;">NodeType* next;<span style="white-space:pre;"> </span></span></div> <div><span style="font-size:11px;">};</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">class LinkedList</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">private:</span></div> <div><span style="font-size:11px;">NodeType<T>* m_pList;</span></div> <div><span style="font-size:11px;">NodeType<T>* m_pCurPointer;<span style="white-space:pre;"> </span></span></div> <div><span style="font-size:11px;">int m_nLength;<span style="white-space:pre;"> </span></span></div> <div><span style="font-size:11px;">};</span></div></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:14px;">링크드 리스트 안에 있는 구현 함수 코드 입니다</span></div> <div><span style="font-size:11px;"><br></span></div> <div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">LinkedList<T>::LinkedList()</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">m_nLength = 0;</span></div> <div><span style="font-size:11px;">m_pList = NULL;</span></div> <div><span style="font-size:11px;">m_pCurPointer = NULL;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">// Class destructor</span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">LinkedList<T>::~LinkedList()</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">MakeEmpty();</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">void LinkedList<T>::MakeEmpty()</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">NodeType<T>* tempPtr;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">while (m_pList != NULL)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">tempPtr = m_pList;</span></div> <div><span style="font-size:11px;">m_pList = m_pList->next;</span></div> <div><span style="font-size:11px;">delete tempPtr;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">m_nLength = 0;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">int LinkedList<T>::GetLength() const</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">return m_nLength;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">int LinkedList<T>::Add(T item)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">ResetList();</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">NodeType<T> *node = new NodeType<T>;</span></div> <div><span style="font-size:11px;">NodeType<T> *pre;</span></div> <div><span style="font-size:11px;">T dummy;</span></div> <div><span style="font-size:11px;">bool bFound = false;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">node->data = item;</span></div> <div><span style="font-size:11px;">node->next = NULL;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">if (!m_nLength)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">m_pList = node;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;">// list 에 node 가 하나 이상 존재하는 경우</span></div> <div><span style="font-size:11px;">else</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">// 가장 마지막 node 로 이동 후 삽입</span></div> <div><span style="font-size:11px;">while (1)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">// 이전 노드를 가리키는 포인터 갱신</span></div> <div><span style="font-size:11px;">pre = m_pCurPointer;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">// iteration 을 이용해 node 포인터 갱신.</span></div> <div><span style="font-size:11px;">GetNextItem(dummy);</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">if (m_pCurPointer->data>node->data)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">if (pre == NULL)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">node->next = m_pCurPointer;</span></div> <div><span style="font-size:11px;">m_pList = node;</span></div> <div><span style="font-size:11px;">break;</span></div> <div><span style="font-size:11px;">}<span style="white-space:pre;"> </span>//넣을 자리 앞 원소가 존재하지 않을 때 첫번째 원소로 삽입.</span></div> <div><span style="font-size:11px;">node->next = m_pCurPointer;</span></div> <div><span style="font-size:11px;">pre->next = node;</span></div> <div><span style="font-size:11px;">break;</span></div> <div><span style="font-size:11px;">}<span style="white-space:pre;"> </span>//지금 가리키는 원소의 data값이 node의 data값보다 클 경우 pre 뒷자리에 삽입.</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">// node 포인터가 마지막 node 를 가리키면 그 뒤에 새로운 node 삽입.</span></div> <div><span style="font-size:11px;">if (m_pCurPointer->next == NULL)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">// 마지막 node 와 새로운 node 연결</span></div> <div><span style="font-size:11px;">m_pCurPointer->next = node;</span></div> <div><span style="font-size:11px;">break;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">m_nLength++;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">return 1;</span></div> <div><span style="font-size:11px;">}</span></div> <div><br></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">int LinkedList<T>::Get(T& item)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">bool moreToSearch, found;</span></div> <div><span style="font-size:11px;">NodeType<T>* location;<span style="white-space:pre;"> </span>//변수 선언</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">location = m_pList;</span></div> <div><span style="font-size:11px;">found = false;</span></div> <div><span style="font-size:11px;">moreToSearch = (location != NULL);<span style="white-space:pre;"> </span>//변수 초기화</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">while (moreToSearch && !found)<span style="white-space:pre;"> </span>//리스트의 끝이 아니면서 아직 찾지 않았으면 반복한다.</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">if (item == location->data)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">found = true;</span></div> <div><span style="font-size:11px;">item = location->data;</span></div> <div><span style="font-size:11px;">}<span style="white-space:pre;"> </span>//일치하는 항목을 찾았을 때 found의 값을 변경해주고 item에 해당 항목을 복사해준다.</span></div> <div><span style="font-size:11px;">else</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">location = location->next;</span></div> <div><span style="font-size:11px;">moreToSearch = (location != NULL);</span></div> <div><span style="font-size:11px;">}<span style="white-space:pre;"> </span>//찾지 못했을 때 다음 항목으로 location을 옮기고 그 값이 NULL이면 리스트의 끝이므로 moreToSearch의 값을 변경해준다.</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">if (found)</span></div> <div><span style="font-size:11px;">return 1;</span></div> <div><span style="font-size:11px;">else</span></div> <div><span style="font-size:11px;">return 0;<span style="white-space:pre;"> </span>//찾으면 1, 그렇지 못하면 0을 리턴한다.</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">// Initializes current pointer for an iteration through the list.</span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">void LinkedList<T>::ResetList()</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">// current pointer 초기화</span></div> <div><span style="font-size:11px;">m_pCurPointer = NULL;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">// Gets the next element in list.</span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">void LinkedList<T>::GetNextItem(T& item)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">// current pointer 이 NULL이라면 처음 node를 가리킴.</span></div> <div><span style="font-size:11px;">if (m_pCurPointer == NULL)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">m_pCurPointer = m_pList;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;">else</span></div> <div><span style="font-size:11px;">//current position 을 다음 노드로 이동</span></div> <div><span style="font-size:11px;">m_pCurPointer = m_pCurPointer->next;</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">//item 에 current position 의 info 를 삽입</span></div> <div><span style="font-size:11px;">item = m_pCurPointer->data;</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">template <typename T></span></div> <div><span style="font-size:11px;">T* LinkedList<T>::GetPoint(T data)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">bool moreToSearch, found;</span></div> <div><span style="font-size:11px;">NodeType<T>* location;<span style="white-space:pre;"> </span>//변수 선언</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">location = m_pList;</span></div> <div><span style="font-size:11px;">found = false;</span></div> <div><span style="font-size:11px;">moreToSearch = (location != NULL);<span style="white-space:pre;"> </span>//변수 초기화</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">while (moreToSearch && !found)<span style="white-space:pre;"> </span>//리스트의 끝이 아니면서 아직 찾지 않았으면 반복한다.</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">if (data == location->data)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">found = true;</span></div> <div><span style="font-size:11px;">data = location->data;</span></div> <div><span style="font-size:11px;">return &location->data;</span></div> <div><span style="font-size:11px;">}<span style="white-space:pre;"> </span>//일치하는 항목을 찾았을 때 found의 값을 변경해주고 item에 해당 항목을 복사해준다.</span></div> <div><span style="font-size:11px;">else</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">location = location->next;</span></div> <div><span style="font-size:11px;">moreToSearch = (location != NULL);</span></div> <div><span style="font-size:11px;">}<span style="white-space:pre;"> </span>//찾지 못했을 때 다음 항목으로 location을 옮기고 그 값이 NULL이면 리스트의 끝이므로 moreToSearch의 값을 변경해준다.</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">return NULL;<span style="white-space:pre;"> </span>//찾지 못하면 0을 리턴한다.</span></div> <div><span style="font-size:11px;">}</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;"><br></span></div></div> <div> <div><span style="font-size:11px;">GenreType 안에 들어가 있는 함수입니다.</span></div> <div><span style="font-size:11px;"><br></span></div> <div> <div><span style="font-size:11px;">void GenreType::AddMusicInGenre(SimpleMusicType indata)</span></div> <div><span style="font-size:11px;">{</span></div> <div><span style="font-size:11px;">g_List.Add(indata);</span></div> <div><span style="font-size:11px;">}</span></div></div></div> <div><span style="font-size:11px;"><br></span></div></div></div></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">-----어플리케이션 class 안에 있는 음원정보를 추가하는 함수입니다.</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">MusicType item;</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">SimpleMusicType items; </span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">item.SetRecordFromKB(); // 추가할 음원의 정보를 입력받음 곡번호,음악명,장르명,가사 등등</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">items.SetInfo(item.GetId(), item.GetMusic()); // 임시객체 items에 item의 곡번호와 음악명을 가져와서 넣어줌</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;"><br></span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">GenreType temp; // 입력된 음악이 어느 장르에 속하는지 찾기 위한 더미</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">GenreType *pData; // mGenreList의 해당 장르를 포인터로 가르키기 위한 더미</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">g_List5.ResetList(); </span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;"><br></span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">for (int i = 0; i < g_List5.GetLength(); i++)</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">{</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">g_List5.GetNextItem(temp);</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">if (item.GetGenre() == temp.GetGenre())</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">{</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">pData = g_List5.GetPoint(temp); // 입력된 음악과 일치하는 장르를 찾아 포인터로 가르킨다</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">pData->AddMusicInGenre(items); // 리스트 안 리스트에 음악 추가</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">break;</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">}</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">}--------------------------------------- </span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;"><br></span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">현재 막히는 부분이 이부분입니다. LinkedList<GenreType> g_List는 처음에 생성자를 통해</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">발라드,힙합,팝송 이라는 정보를 가지고 있습니다 리스트 안에 또 다른 리스트가 들어가 있기에</span></div> <div style="font-family:'Malgun Gothic';font-size:medium;"><span style="font-size:11px;">for문을 통하여 입력받은 장르명과 동일한 장르명을 찾앗을시 포인터 객체를 통하여 그 노드주소를 저장하고 AddMusicInGenre (장르타입 클래스) 함수를 이용하여 리스트 안에 리스트에 해당 정보를 저장하려 하는데 첫번째 데이터는 잘들어가지만 2번째 데이터를 넣으려고 하면 콘솔창에서 에러가 나옵니다. 노드의 범위가 문제가 되는것 같은데 아무리 해결하려 해봐도 도저히 답이 안나와서 여쭤봅니다 </span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">리스트 안에 리스트 없이 하면 쉽게 할수 있는데 리시트 안에 리스트로 하려고 보니 노드의 포인터가 문제가 되는건지 도저히 모르겟네요...</span></div> <div><span style="font-size:11px;"><br></span></div> <div><span style="font-size:11px;">3일내내 이 부분 하나를 못넘어가고 있습니다 ㅠㅠ </span></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.