#include <stdio.h>
#include <stdlib.h>
struct data{
int num; // 구조체의 값을 나타낼 변수
struct data *next; // 다음 노드를 가리킬 포인터
};
int main(){
struct data *head = NULL; // 첫번째 노드를 가리킬 머리
struct data *tail = NULL; // 끝 노드를 가리킬 꼬리
struct data *cur = NULL; // 노드를 이동할 커서
struct data *newnode = NULL; // 다음 노드
int a;
// 입력부분
while(1){
printf("수를 입력하세요: ");
scanf("%d", &a);
if(a < 1){ // 0 입력시 종료
break;
}
newnode = (struct data*)malloc(sizeof(struct data)); // 새로운 노드에 구조체 동적 할당
newnode->num = a; // 새로운 노드에 입력한 값을 넣어줌
newnode->next = NULL; // 새로운 노드가 가리킬 포인터를 초기화
if(head==NULL){ // head가 null이란 뜻은 첫번째 노드란 뜻이다.
head = newnode; // 머리는 첫번째 노드를 가리킨다
}else{
tail->next = newnode; // 두번째 노드에 왔을때 첫번째 노드가 다음 노드를 가리키게함
}
tail = newnode; // 꼬리는 첫번째 노드를 가리킨다
}
// 출력부분
if(head == NULL){
puts("노드가 없습니다.");
}else{
cur = head;
printf("%d ", cur->num); // 첫번째 노드를 출력한다
while(cur->next != NULL){ // 다음 노드가 NULL이 아닐때까지
cur = cur->next; // next에는 다음 노드의 주소가 들어있다. cur는 다음 노드를 가리킨다.
printf("%d ", cur->num); // 다음 노드의 값에 접근하여 출력한다.
}
}
printf("\n");
// 삭제부분
if(head == NULL){
return 0;
}else{
struct data *del = head;
struct data *delnext = head->next;
printf("%d 삭제 \n", del->num); // 첫번째 노드를 해제한다
free(del);
while(delnext != NULL){ // 다음 노드가 null이 아닐때까지
del = delnext; // 포인터의 위치를 한칸씩 옮긴다.
delnext = delnext->next;
printf("%d 삭제 \n", del->num); // 옮긴 위치에 있는 노드를 해제한다
free(del);
}
}
return 0;
}
// 링크드 리스트는 자료구조에서 가장 쉬운 부분이다.
'자료구조' 카테고리의 다른 글
[자료구조] 리스트로 된 스택 (0) | 2019.12.12 |
---|---|
[자료구조] 배열로 된 스택 (0) | 2019.12.12 |
[자료구조] 배열로 된 연결 리스트 (0) | 2019.12.12 |
[자료구조] 선택정렬 (0) | 2019.12.07 |
[자료구조] 버블소트 (0) | 2019.12.07 |