자료구조를 배우는데 반복문을 모르겠습니다...ㅜㅜ
햇님
질문 제목 : 반복문 질문c로 배우는 자료구조를 배우고 있는데 코드를 보면 중간중간 반복문이 나옵니다.. 그런데 제가 생각하기로 컴파일 하면 무한루프가 돌거 같은데 실제 실행하면 잘만 되네요.. 이게 왜 무한루프가 안되는지 설명좀 부탁합니다..질문 내용 : #include stdio.h
#include stdlib.h
#include string.h
typedef struct listnode{ //단순연결리스트의 노드 구조 정의
char data[10];
struct listnode* link;
} listnode;
typedef struct{ //리스트의 헤드 노드의 구조 정의
listnode* head;
} linkedlist_h;
linkedlist_h* createlinkedlist_h(void);
void freelinkedlist_h(linkedlist_h*);
void addlastnode(linkedlist_h*, char*);
void reverse(linkedlist_h*);
void deletelastnode(linkedlist_h*);
void printlist(linkedlist_h*);
linkedlist_h* createlinkedlist_h(void){ //공백 연결리스트 생성 연산
linkedlist_h* l;
l = (linkedlist_h*)malloc(sizeof(linkedlist_h)); //헤드 노드 할당
l - head = null; //공백 리스트이므로 null 설정
return l;
}
void addlastnode(linkedlist_h* l, char* x){ //리스트의 마지막 노드 삽입 연산
listnode* newnode;
listnode* p;
newnode = (listnode*)malloc(sizeof(listnode)); //삽입할 새 노드 할당
strcpy(newnode-data, x); //새 노드의 데이터 필드에 x 저장
newnode-link= null;
if (l-head == null){ //현재 리스트가 공백인 경우 :
l-head = newnode;
return;
}
p = l-head;
while (p-link != null) p = p-link; // 뭔가 허전해 보이는데 실행에는 문제가 없음..
p -link = newnode;
}
void reverse(linkedlist_h * l){ //리스트의 노드 순서를 역순으로 바꾸는 연산
listnode* p;
listnode* q;
listnode* r;
p = l-head;
q=null;
r=null;
while (p!= null){ //노드의 연결을 반대로 바꾸기
r = q;
q = p;
p = p-link;
q-link = r;
}
l-head = q;
}
void deletelastnode(linkedlist_h * l){ //리스트의 마지막 노드 삭제 연산
listnode* previous;
listnode* current;
if (l-head == null) return; //공백 리스트인 경우, 삭제 연산 중단
if (l-head-link == null) { //리스트에 노드가 한 개만 있는 경우,
free(l-head); // 첫 번째 노드를 메모리 해제하고
l-head = null; // 리스트 시작 포인터를 null로 설정한다.
return;
}
else { //리스트에 노드가 여러 개 있는 경우,
previous = l-head;
current = l-head-link;
while(current -link != null){ //이상한 반복문
previous = current;
current = current-link;
}
free(current);
previous-link = null;
}
} void freelinkedlist_h(linkedlist_h* l){ //리스트 전체 메모리 해제 연산
listnode* p;
while(l-head != null){ // 이해가 안가는 반복문
p = l-head;
l-head = l-head-link;
p; free(p);
p=null;
}
}
void printlist(linkedlist_h* l){ //노드 순서대로 리스트를 출력하는 연산
listnode* p;
printf(l = ();
p= l-head;
while(p != null){ // 흠..ㅜㅜ
printf(%s, p-data);
p = p-link;
if(p != null) printf(, );
}
printf() \n);
}
int main(){
linkedlist_h* l;
l = createlinkedlist_h();
printf((1) 공백 리스트 생성하기! \n);
printlist(l); getchar();
printf((2) 리스트에 3개의 노드 추가하기! \n);
addlastnode(l, 월);
addlastnode(l, 수);
addlastnode(l, 금);
printlist(l); getchar();
printf((3) 리스트 마지막에 노드 한개 추가하기! \n);
addlastnode(l, 일);
printlist(l); getchar();
printf((4) 마지막 노드 삭제하기! \n);
deletelastnode(l);
printlist(l); getchar();
printf((5) 리스트 원소를 역순으로 변환하기! \n);
reverse(l);
printlist(l); getchar();
printf((6) 리스트 공간을 해제하여, 공백 리스트 상태로 만들기! \n);
freelinkedlist_h(l);
printlist(l);
getchar();
return 0;
}
책에 있는 예제 인데요..코드 중간중간에 나오는 while문들을 보면 그 조건이 널을 만날때 까지가 조건입니다..
그런데 for문의 i처럼 무언가 카운터를 해야지 조건이 게속 바뀔텐데 이 코드에서는 반복문에 조건만 있네요.. 제 생각대로라면 while문을 만나고 조건이 널이 아니면 그대로 무한루프가 될거 같은데 신기하게도 컴파일 하면 아무 문제 없이 실행 되네요.. 다른 코드들은어느정도 이해가 가는데while문이 도대체 어떤 방식으로 동작하는지가 이해가 안갑니다..
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700400 | 원넓이를 계산이요 ㅜㅜ | 천칭자리 | 2025-07-04 |
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |
2700236 | txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) | 미국녀 | 2025-07-03 |
2700211 | 전위 연산자 (2) | 어른처럼 | 2025-07-02 |
2700183 | C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; | 피스케스 | 2025-07-02 |
2700150 | 꼭좀 도와주세요ㅠㅠㅠ | 호습다 | 2025-07-02 |
2700095 | 연산문제...질문... | 오빤테앵겨 | 2025-07-01 |
2700070 | while문 , 3의배수 출력하는 프로그램좀 짜주세욤. | 횃불 | 2025-07-01 |
2700041 | 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? | 헛장사 | 2025-07-01 |
2700012 | 배열// (1) | 전갈자리 | 2025-07-01 |
2699895 | 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) | 선아 | 2025-06-30 |
2699842 | 질문을 너무 많이 하네여.....죄송.... (2) | 해님꽃 | 2025-06-29 |
2699816 | 오류 질문입니다.. (1) | 해비치 | 2025-06-29 |
2699763 | 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) | 미라 | 2025-06-28 |
2699555 | c언어 다항식을 입력을 했는데 왜 출력이 안될까요? | 피스케스 | 2025-06-27 |
2699528 | C언어 포인터연산 질문입니다. (3) | 안녕나야 | 2025-06-26 |