#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
int iNum;
struct _node *stNext; //자기 참조 포인터
} Node;
void node_init(Node *stTemp)
{
if(stTemp == 0)
{
return;
}
printf("번호를 입력하세요 : ");
scanf("%d", &(stTemp->iNum));
stTemp->stNext = 0;
}
///////////////////////////////////////////////////////////////////////////
void node_insert3(Node **stHead) //제일 작은 값이 앞에 오도록 정렬하며 저장
{
Node *stHelp;
Node *stESeeker;
Node *stTemp;
if(0 == stHead)
{
return;
}
stTemp = (Node *)malloc(sizeof(Node));
node_init(stTemp);
if(0 == *stHead)
{
*stHead = stTemp;
return;
}
if( stTemp->iNum > (*stHead)->iNum )
{
stTemp->stNext = *stHead;
*stHead = stTemp;
return;
}
stESeeker = stHelp = *stHead;
while( 0 != stESeeker )
{
if( stTemp->iNum > stESeeker->iNum )
{
stTemp->stNext = stESeeker;
if( *stHead == stESeeker )
{
*stHead = stTemp;
return;
}
stHelp->stNext = stTemp;
return;
}
stHelp = stESeeker;
stESeeker = stESeeker->stNext;
}
stTemp->stNext = stESeeker;
stHelp->stNext = stTemp;
return;
}
//////////////////////////////////////////////////////////////////////////////
void node_insert2(Node **stHead) //리스트의 제일 앞에 저장
{
Node *stTemp;
if(0 == stHead)
{
return;
}
stTemp = (Node *)malloc(sizeof(Node));
node_init(stTemp);
if(0 == *stHead)
{
*stHead = stTemp;
return;
}
stTemp->stNext = *stHead;
*stHead = stTemp;
}
//////////////////////////////////////////////////////////////////////////////////
void node_insert1(Node **stHead) //리스트의 끝에 저장
{
Node *stESeeker;
Node *stTemp;
if(0 == stHead)
{
return;
}
stTemp = (Node *)malloc(sizeof(Node));
node_init(stTemp);
if(0 == *stHead)
{
*stHead = stTemp;
return;
}
stESeeker = *stHead;
while( 1 )
{
if( 0 == stESeeker->stNext )
{
stESeeker->stNext = stTemp;
break;
}
stESeeker = stESeeker->stNext;
}
return;
/*
Node **tmp = stHead;
while(*tmp != 0)
{
tmp = &((*tmp)->stNext);
}
*tmp = stTemp;
*/
////////////////////////////////////
////////////////////////////////////
/*
while(*stHead != 0)
{
stHead = &((*stHead)->stNext);
}
*stHead = stTemp;
*/
///////////////////////////////////
//(*stHead)->stNext = stTemp;
}
void node_print(Node *);
void node_free(Node *);
int main(void)
{
Node *head = 0;
node_insert3(&head);
node_insert3(&head);
node_insert3(&head);
node_insert3(&head);
node_insert3(&head);
/*
head = (Node *)malloc(sizeof(Node));
head->iNum = 100;
head->stNext = (Node *)malloc(sizeof(Node));
head->stNext->iNum = 200;
head->stNext->stNext = (Node *)malloc(sizeof(Node));
head->stNext->stNext->iNum = 300;
head->stNext->stNext->stNext = 0;
*/
node_print(head);
node_free(head);
return 0;
}
void node_print(Node *temp)
{
while(temp != 0)
{
printf("%d->", temp->iNum);
temp = temp->stNext;
}
printf("NULL\n");
}
void node_free(Node *head)
{
Node *temp = head;
while(temp != 0)
{
temp = head->stNext;
printf("%d 해제\n", head->iNum);
free(head);
head = temp;
}
}
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
연결리스트 소스 (0) | 2015.05.19 |
---|---|
연결리스트 코드(재업) (0) | 2015.05.19 |
20150515 - 11번 - 남수진 - CTC 모드 타이머/ 도서관리프로그램 (8) | 2015.05.16 |
2015-05-13 업무일지 연결리스트 (6) | 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 |
20150508 -6번 -김성현 ADC차동입력, 아날로그 비교기 및 Linked list (4) | 2015.05.11 |