728x90
반응형
|
/* ***********삽입하면서 정렬하는 코드*************** */
void Node_Insert3(Node ** stHead)
{
Node * stTemp = 0;
Node * stESeeker = 0;
Node * stHelp = 0;
if(stHead ==0)
{
return;
}
stTemp = malloc(sizeof(Node));
Node_Init(stTemp);
if(0 == *stHead) //제일처음 노드를 연결해주는 코드
{
* stHead = stTemp;
return;
}
if(stTemp -> iNum < (*stHead) -> iNum)
{
stTemp -> stNext = *stHead;
*stHead = stTemp;
return;
}
/* *************20150513 신규 코드*************** */
// stHelp,stESeeker,stHead는 같은 위치를 가르키게 만든다.
void Node_Insert3(Node ** stHead)
{
Node * stTemp = 0;
Node * stESeeker = 0;
Node * stHelp = 0;
if(stHead ==0)
{
return;
}
stTemp = malloc(sizeof(Node));
Node_Init(stTemp);
if(0 == *stHead) //제일처음 노드를 연결해주는 코드
{
* stHead = stTemp;
return;
}
if(stTemp -> iNum < (*stHead) -> iNum)
{
stTemp -> stNext = *stHead;
*stHead = stTemp;
return;
}
/* *************20150513 신규 코드*************** */
// stHelp,stESeeker,stHead는 같은 위치를 가르키게 만든다.
stHelp = stESeeker = *stHead;
// stESeeker가 NULL값을 가르킬때까지 while문을 반복한다.
while(stESeeker != 0)
{
if(stTemp -> iNum < stESeeker->iNum)
{
stTemp -> stNext = stESeeker;
if(*stHead == stESeeker)
{
*stHead = stTemp;
return;
}
stHelp -> stNext = stTemp;
return;
}
stHelp = stESeeker;
//ESeeker랑 같은 곳을 가르키고
stESeeker = stESeeker -> stNext;
//stESeeker는 한칸뒤로 이동하면서 stHelp는 항상 stESeeker의 뒤로 따라온다.
}
//Null에 도달했을때 연결리스트를 삽입해주는 코드
stTemp -> stNext = stESeeker;
stHelp -> stNext = stTemp;
return;
}
// stESeeker가 NULL값을 가르킬때까지 while문을 반복한다.
while(stESeeker != 0)
{
if(stTemp -> iNum < stESeeker->iNum)
{
stTemp -> stNext = stESeeker;
if(*stHead == stESeeker)
{
*stHead = stTemp;
return;
}
stHelp -> stNext = stTemp;
return;
}
stHelp = stESeeker;
//ESeeker랑 같은 곳을 가르키고
stESeeker = stESeeker -> stNext;
//stESeeker는 한칸뒤로 이동하면서 stHelp는 항상 stESeeker의 뒤로 따라온다.
}
//Null에 도달했을때 연결리스트를 삽입해주는 코드
stTemp -> stNext = stESeeker;
stHelp -> stNext = stTemp;
return;
}
그림으로 설명
먼저 stHelp = stESeeker = *stHead; 를 적어줌으로써 전부다 첫번째 구조체를 가르키게 만들고.
while의 조건이 stESeeker가 NULL값을 가르킬때까지 반복이니 while로 진입한다.
① 첫번째 if에서 ( stTemp -> iNum(5) < stESeeker -> iNum(3) ) 을 비교하지만
거짓이기 때문에if문에 진입하지 않고 바로 다음 코드로 넘어간다.
② stHelp = stESeeker; 를 실행
③ stESeeker = stESeeker -> stNext;를 실행 위의 코드와 이코드를 실행해줌으로서
stESeeker는 앞으로 한칸이동하고 stHelp는 항상 stESeeker 바로뒤의 구조체를 가르킬수 있게된다.
④ 다시 if문으로 돌아가서 ( stTemp -> iNum(5) < stESeeker -> iNum(8) )을 비교
참이기 때문에 if문으로 진입한다.
⑤ stTemp -> stNext = stESeeker;를 실행해서 5다음 8오도록 연결한다.
⑥ stHelp -> stNext = stTemp;를 실행해서 3다음 5가 오도록 연결한다.
if(*stHead == stESeeker)
{
*stHead = stTemp;
return;
}
{
*stHead = stTemp;
return;
}
위의 코드의 경우는 3보다 작은수를 넣었을 경우에
stHead가 stTemp 가르키게 함으로써 무한루프를 방지해준다.
stHead가 stTemp 가르키게 함으로써 무한루프를 방지해준다.
stTemp -> stNext = stESeeker;
stHelp -> stNext = stTemp;
stHelp -> stNext = stTemp;
NULL값과 10사이에 숫자를 넣어주는 코드이다
오전은 제가 진도를 아직 못빼서 혼자 기본하고 있어서 올리지를 못하겠네요 ㅠㅠ
필력이 조금 딸려도 너그럽게 보시고 피드백 많이 부탁드립니다 오늘도 고생많으셨습니다!
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015.05.20 Linux Hex_view Source (0) | 2015.05.20 |
---|---|
연결리스트 소스 (0) | 2015.05.19 |
연결리스트 코드(재업) (0) | 2015.05.19 |
20150515 - 11번 - 남수진 - CTC 모드 타이머/ 도서관리프로그램 (8) | 2015.05.16 |
연결리스트 - insert3 함수 (2) | 2015.05.13 |
다들 아시는거 일지 모르지만 vi랑 윈도우 사이 복붙 Tip (2) | 2015.05.13 |
2015/05/12:: 20150512-8번-김태영-널확인, 오름차순 연결리스트 (5) | 2015.05.13 |
20150511-7번-김재홍-PWM / C 연결리스트 (11) | 2015.05.12 |