scp

단순 연결 리스트 클론 코딩

cucu0417 2025. 5. 26. 16:19

출처 : https://shitandcomputer.tistory.com/71

 

C언어로 연결리스트(Linked List) 구현하기

연결 리스트 저번 시간에 구현했던 그냥 '리스트'와는 달리, 연결 리스트는 동적으로 크기가 변할 수 있고, 삭제나 삽입 시에 데이터를 이동할 필요가 없다. why? 이것이 연결리스트의 기본 구조

shitandcomputer.tistory.com

 

노드 정의

4 : int == element

7 : (= int data) 실제 저장할 값

8 : Node 구조체를 가진 포인터 , 다음 노드의 주소를 가리키는 포인터

 

 

 

리스트의 시작 부분에 삽입(insert_first)

13 : 새로운 노드 p 생성

14 : 새 노드 p가 가지고 있는 데이터 칸에 value 넣기
15 : 새 노드 p의 link에 head를 넣음
       (head는 맨 처음 노드를 가리키는 포인터이기 때문에 맨 처음 노드의 주소가 들어있음)

       --> 즉 원래 맨 처음 노드를 p가 가리키게 함
16 : head에 p의 주소를 넣음

       --> p가 맨 처음 노드가 됌

18 : 바뀐 head를 반환함

 

예를 들어 원래

head -> x[1] -> x[2]

라고 했다다면 위에 코드로 이렇게 바뀜

head -> p -> x[1] -> x[2]

 

 

 

리스트의 중간에 삽입(insert)

24 : 새로운 p 생성

25 : 새 노드 p가 가지고 있는 데이터 칸에 value 넣기

26 : p의 link에 prev의 link값을 넣음

       prev의 link에는 다음 노드의 주소가 들어있음

       --> prev의 다음 노드를 p가 가리킴

27 : prev의 link에 p의 주소값을 넣음

       --> prev는 p를 가리킴

 

예를 들어 원래

head -> prev -> x[1]

라고 했다다면 위에 코드로 이렇게 바뀜

head -> prev -> p -> x[1]

 

 

 

리스트의 시작 부분 삭제(delete_first)

 

35 ~ 36 : head가 NULL을 가리킨다면 빈 리스트로써 NULL을 반환

37 : removed에 head를 저장
       head가 가리키는 노드 = 맨 처음 노드

       --> removed == 맨 처음 노드

38 : head를 removed 노드의 link(다음 노드)값으로 저장
39 : removed 할당 해제

 

예를 들어 원래

head -> x[1] -> x[2]

라고 했다다면 위에 코드로 이렇게 바뀜

head -> x[2]

 

 

 

리스트의 중간 부분 삭제(delete)

 

48 : removed에 prev의 link에 있는 값(다음 노드의 주소)를 저장

       --> remove == prev가 가리키는 노드 다음 노드

49 : prev의 링크에 removed의 link 값(remove의 다음 노드 값)를 저장

50 : removed 할당 해제

 

예를 들어 원래

head -> prev -> x[1] -> x[2]

라고 했다다면 위에 코드로 이렇게 바뀜

head -> prev -> x[2]

 

 

 

출력 함수(print_list)

 

57 : p에 head(첫번째 주소)를 넣고 p가 NULL을 가릴킬 때 까지

       p가 p의 link에 있는 다음 노드 주소가 되면서 반복

59 : p에 있는 data값을 출력한다

 

 

값 삽입

75 : head의 링크(다음 노드) 뒤에 삽입이 되므로

       head -> x[1] -> 4 

       3번째에 삽인된다

 

 

 

결과

 

'scp' 카테고리의 다른 글

C언어 멘토링 오답노트  (0) 2025.06.04
리눅스 관리 권한 체계 및 /etc/passwd 와 /etc/shadow  (0) 2025.05.23
prob 파일 command injection  (0) 2025.05.20
포인터, 동적할당  (0) 2025.05.20
Command injection 취약점 정리  (0) 2025.05.17