1. 사전 지식
"C로 배우는 알고리즘"에 설명된 Linked List에 대한 주요 내용은 다음과 같습니다. 1
1. Linked List는 Node와 Link로 구성됨
2. Linked List는 Link의 개수와 연결 상태에 따라 "단순 연결 리스트", "환형 연결 리스트", "이중 연결 리스트", "이중 환형 연결 리스트"등이 있음
2. Simple Linked List
- Simple Linked List는 "정보를 저장하는 Node"와 "바로 다음 Node를 가리키는 Link" 하나로 구성됩니다.
- Linked List의 최대 장점은 재배열(rearrangement)이 쉽다는 것입니다.
- 관리를 위해서 Head Node와 Tail Node를 가집니다.
2. 동작 코드
class Node:
def __init__(self, key=-1):
self.key = key
self.next = None
Global로 head와 tail을 선언해서 작성해도 되겠지만, class 내에서 처리할 수 있도록 LinkedList라는 class를 작성했습니다. "C로 배우는 알고리즘"에 있듯이 head는 tail을, tail을 tail을 next로 지정하였습니다.
key 입력에 따라 정렬한 상태로 입력할 수 있도록 ordered_insert() 함수와 해당 key 값의 node를 지우고, 모든 node들을 print하는 함수를 작성하였습니다.
class LinkedList:
def __init__(self):
self.head = Node()
self.tail = Node()
self.head.next = self.tail
self.tail.next = self.tail
def ordered_insert(self, key):
newNode = Node(key)
p = self.head
s = p.next
while s.key <= key and s != self.tail:
p = p.next
s = p.next
p.next = newNode
newNode.next = s
def delete_node(self, key):
p = self.head
s = p.next
while s.key != key and s != self.tail:
p = p.next
s = p.next
if s != self.tail:
p.next = s.next
return True
else:
return False
def print_node(self):
p = self.head
p = p.next
print("Start", end=" ")
while p != self.tail:
print(p.key, "->", end=" ")
p = p.next
print("End")
3. 실행 코드
Simple Linked List 함수들의 실행 코드는 아래와 같습니다. ("C로 배우는 알고리즘" 리스트 3-4 : LINKED1.C에 대응)
ordered_insert() 함수로 임의의 integer type의 key값을 갖는 node들을 생성한 후 print합니다. 그리고 하나의 node를 그리고 다시 print합니다.
#main() function
if __name__ == "__main__":
list = LinkedList()
list.ordered_insert(7)
list.ordered_insert(8)
list.ordered_insert(1)
list.ordered_insert(9)
list.print_node()
list.delete_node(7)
list.print_node()
5. 코드
'프로그래밍 > Python 초보자가 작성하는 "C로 배우는 알고리즘"' 카테고리의 다른 글
[03-6] 연결 리스트(Linked List) - 이중 연결 리스트(Doubly Linked List) (0) | 2018.05.02 |
---|---|
[03-5] 연결 리스트(Linked List) - 환형 연결 리스트(Circular Linked List) (0) | 2018.05.01 |
[03-1] 미로에 갖힌 생쥐 - 3/3 (0) | 2018.04.30 |
[03-1] 미로에 갖힌 생쥐 - 2/3 (1) | 2018.04.29 |
[03-1.1] curses module (0) | 2018.04.29 |