링크드 리스트 자기참조 구조체
핫핑크
질문 제목 :
링크드 리스트, 자기참조 구조체
Linked like로 데이터를 입력하는 프로그램입니다.
질문은 주석을 참고하시면 됩니다.
그리고 linked list에 대한 설명이 자세히 나온 책이 있으면 추천해 주세요.
질문 내용 :
#includestdio.h
typedef struct record
{
char name[20];
int birth;
struct record* next; //구조체 포인터
} *LINK;
//typedef struct record의 데이터 타입을 포인터로 한 이유는 무엇입니까?
void list_record();
LINK start; //전역변수
void list_record()
{
LINK current; //지역변수
/*LINK start, LINK current 이렇게 전역과 지역변수를
각각 선언하는 이유는 무엇입니까? */
printf(\nstart=0x%5x\n,start);
for(current=start; current; current=current-next)
/*1.for문 초기식에서 current와 start를 대입하는 이유?
2.조건식이 current인 이유?
3.증감식이 current=current-next인 이유? */
printf(0x%5x %-20s 0x%5x\n, current,current-name,current-next);
}
-
청력
네! 답변 감사합니다. ^_^
-
치에미
보통 끝에있는 노드에는 NULL이라는 값을 세팅(C-next = NULL)되어 있어서 끝으로 인식하게 하는데
current = C이렇게 되어 있으면 current-next 는 NULL이겠죠... 그럼 NULL(값으로는 0)은 조건식에서 거짓이 되어서 조건식을 빠져나오게 됩니다. -
나미
하나 더 물어보겠습니다. for문에서 조건식이 current인데 current 조건을 만족할 때까지 계속 수행한다는 얘긴가요? 그렇다면 current조건식을 만족한다는 건 무얼 말하는 건가요?
-
조심해
자세한 설명 감사합니다. 좋은 하루 보내세요^^
-
갤2
3. for에서 ++, --연산이 필요없구 current=current-next라는 연산식이 다음노드 즉 현재 종이컵에서 연결선(current-next)을 따라서 가면 자동으로 다음 노드에 도착한다 그곳에 현재의 포커스를 위치하는 것임
[ A(start, current)---B----C ] 현재 A에 있다가 current = current-next이 식을 만나면
[ A(start)---B(current)----C ] 이렇게 포이터를 이동하게 됩니다.
-
알찬바로
1. struct record* next; //구조체 포인터
로 하는 이유는 선영 구조체를 만들기 위해서 현재와 다음의 LINK라는 노드를 연결하기 위해서 필요한것 즉 실고리에 종이컵을 여러개 연결할때 처음 종이컵에서 실을 하나 뽑아서 다음 종이컵에 연결할때 이 실처럼 연결을 하는 용도로 쓰이는 것이 위이 구조체 내에 쓰이는 포인터입니다.
2. start는 전역으로 쓰여서 여러개의 종이컵이 연결된 부분의 머리 부분을 표시해둠으로써
항상 start를