#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
블로그 이미지

ryancha9

https://blog.naver.com/7246lsy

,