ݺߣ

ݺߣShare a Scribd company logo
Simple LinkedList
from C
창원대 정보통신공학과 김대호
목차
• 정의
• 기본 타입 (HEAD, TAIL, NODE)
• 노드 생성 newNode()
• 노드 삽입 (맨 앞, 맨 뒤
단순 연결 리스트
• 기본적인 Linked List 기초 중 기초
• 노드 끼리 연결된 형태 이중 Pointer를 사용함
기본 타입
기본 타입
Node
data next
기본 타입
Node
data next
data : 노드 내부 저장소(정수
형)
next : 다음 노드를 가르 킬
포인터 노드(Node형)
기본 타입
node
(NULL)
data
(0)
next
(NULL)
HEAD, TAIL
head
(NULL)
data
(0)
next
(NULL)
tail
(NULL)
data
(0)
next
(NULL)
메모리 할당 malloc
• 데이터의 힙(heap) 영역에서 다루기위한 함수
• 할당 후, 데이터를 없애기 위해서는 free()를 선언
해주어야함
메모리 할당 malloc
newNode()
• newNode()는 구조체에서 구성 된 것들을 malloc
을 통하여 생성해주는 함수
• malloc과 data를 삽입시켜줌
newNode()
node1
(NULL)
data
(0)
next
(NULL)
newNode()
node1
(NULL)
data
(10)
next
(NULL)
newNode()
node1
(NULL)
data
(10)
next
(NULL)
노드삽입
• 노드를 연결 시키기 위해 head와 tail을 이용
• 맨 앞에 노드추가, 맨 뒤에 노드추가, 원하는 위치
에 노드 추가가 있음
맨 앞에 노드추가
addNodeFirst()
• addNodeFirst()는 새롭게 생성된 노드를 head(맨
앞)으로 붙여주는 함수
• 이중 포인터 구문을 사용하여 쉽게 표현가능
addNodeFirst()
addNodeFirst()
head
(NULL)
data
(0)
next
(NULL)
addNodeFirst()
head
(NULL)
data
(0)
next
(NULL)
tail
(NULL)
data
(0)
next
(NULL)
addNodeFirst()
head
(NULL)
data
(0)
next
(NULL)
tail
(NULL)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
addNodeFirst()
addNodeFirst 호출
addNodeFirst()
head
(NULL)
data
(0)
next
(NULL)
tail
(NULL)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
addNodeFirst()
*head
(NULL)
data
(0)
next
(NULL)
*tail
(NULL)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
Node 포인터 변수의
주소를 저장 하는
이중 포인터 head, tail
addNodeFirst()
*head
(NULL)
data
(0)
next
(NULL)
*tail
(NULL)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
addNodeFirst()
*head
(node1)
data
(0)
next
(NULL)
*tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
(*head) 가 NULL일 경우,
(*head)의 값은 node1의 주
소 값
(*tail)의 값은 node1의 주소
값
을 가르킨다
addNodeFirst()
*head
(node1)
data
(0)
next
(NULL)
node
(NULL)
data
(0)
next
(NULL)
*tail
(node1)
data
(0)
next
(NULL)
addNodeFirst()
*head
(node1)
data
(0)
next
(NULL)
*tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
tail과 node1의 위치를 바꾸
고..
addNodeFirst()
*head
(node1)
data
(0)
next
(NULL)
*tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
가르킨다를 방향으로 표시함
addNodeFirst()
addNodeFirst 호출
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
head와 tail은 node1을
가르키고 있다
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
+
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
+
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(*head
=node1)
+
(*head)는 node1의 주소 값
이다! (중요)
왜 head를 안가르키냐 헷갈려 할 수
있지만 head 가 아니다! (*head)다!!
addNodeFirst()
head
(node2)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(*head
=node1)
+
이 구문을 통해 ,
(*head)는 node2의 주소 값
을
가르킨다
addNodeFirst()
*head
(node2)
data
(0)
next
(NULL)
약간 위치를 정리하면…
node2
(NULL)
data
(20)
next
(node1)
node1
(NULL)
data
(10)
next
(NULL)
*tail
(node1)
data
(0)
next
(NULL)
addNodeFirst()
*head
(node2)
data
(0)
next
(NULL)
더 정리하면… 맨 마지막에
생성 된 것이 맨 앞에 연결 된
다!
node2
(NULL)
data
(20)
next
(node1)
node1
(NULL)
data
(10)
next
(NULL)
*tail
(node1)
data
(0)
next
(NULL)
addNodeLast()
• addNodeLast()는 새롭게 생성된 노드를 tail(맨 끝
)으로 붙여주는 함수
• addNodeFirst()의 개념을 이해 했다면 충분히 이
해 가능
addNodeLast()
우리가 addNodeFirst를 통해
node1은 연결 됬다고 놨다고
생각하자!
addNodeLast()
현재 구조
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
addNodeLast()
addNodeLast 호출
addNodeLast()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
addNodeLast()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
head와 tail은 node1을
가르키고 있다
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
addNodeLast()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
+
addNodeFirst()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
+
addNodeLast()
head
(node1)
data
(0)
next
(NULL)
tail
(node1)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(node2)
node2
(NULL)
data
(20)
next
(NULL)
+
(*tail)->next는 그림 속의 node1-
>next 나 같은 의미다 즉 node2를
가르킨다
addNodeLast()
head
(node1)
data
(0)
next
(NULL)
tail
(node2)
data
(0)
next
(NULL)
node1
(NULL)
data
(10)
next
(NULL)
node2
(NULL)
data
(20)
next
(NULL)
+
이 구문을 통해 ,
(*tail)는 node2의 주소 값을
가르킨다
addNodeLast()
*head
(node2)
data
(0)
next
(NULL)
약간 위치를 정리하면…
node1
(NULL)
data
(10)
next
(node2)
node2
(NULL)
data
(20)
next
(NULL)
*tail
(node2)
data
(0)
next
(NULL)
addNodeLast()
*head
(node1)
data
(0)
next
(NULL)
더 정리하면… 맨 마지막 생
성 된 것이 맨 뒤에 연결 된다
!
node1
(NULL)
data
(10)
next
(node2)
node2
(NULL)
data
(20)
next
(NULL)
*tail
(node2)
data
(0)
next
(NULL)
마무리
• 기본적인 Linked List 삽입 구조만 정확히 이해 했
다면 index삽입, 삭제, 이중 링크드리스트, 순환
링크드리스트도 충분히 이해 할 수 있습니다.
• 다음시간에는 index 삽입, 삭제 관련된 자료를 준
비하겠습니다.

More Related Content

단순 Linked list