일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pyqt5
- pandas
- html
- 깃
- pythongui
- 파워포인트
- python
- git
- office
- matlab
- Windows11
- VBA
- 아웃룩
- 엑셀
- 안드로이드
- Windows10
- 파이썬3
- 오피스
- windows
- 윈도우11
- 윈도우10
- Android
- win32com
- 문자열
- Outlook
- 비주얼베이직
- 파이썬
- python3
- Excel
- 파이썬GUI
Appia의 IT세상
파이썬[Python] 038 Double Linked list(이중 연결 리스트) 본문
이번 포스팅은 앞서서 Linked List의 진보판인 Double Linked List에 대해서 명시해보고자 합니다. 앞서서 포스팅한 Linked List에는 다음오는 객체를 지칭하는 부분만 있는 반면에 Dobule Linked List에서는 전후에 대한 지칭하는 포인트가 존재합니다. 그래서 한번 간단히 Node를 구성해보는 것은 다음과 같습니다.
Node과 Head 부분에 대해서 구성해보겠습니다.
class Node:
def __init__(self, value):
self.val = value
self.next = None
self.prev = None
class dlinked_list:
def __init__(self):
self.head = None
앞부분 추가하기
def push(self, NewVal):
NewNode = Node(NewVal)
NewNode.next = self.head
if self.head is not None:
self.head.prev = NewNode
self.head = NewNode
먼저 간단히 설명을 드리고, Node를 하나 추가하시고, Next를 self.head가 지칭하는 부분으로 바꿉니다. 그런 후 self.head.prev를 방금 만들어 추가한 NewNode로 지칭합니다. 그리고 self.head를 NewNode로 바꾸어 주시면 됩니다.
끝에 추가하기
def append(self, NewVal):
NewNode = Node(NewVal)
NewNode.next = None
if self.head is None:
NewNode.prev = None
self.head = NewNode
return
last = self.head
while (last.next is not None):
last = last.next
last.next = NewNode
NewNode.prev = last
return
먼저, 안에 맴버가 없는 경우 self.head is None의 경우 Node가 하나도 없는 경우입니다. 그럴 경우, NewNode.prev = None으로 지정하고, self.head는 NewNode로 지칭하고 return 합니다.
* return를 하면 함수를 끝내버립니다.
맴버가 있는 경우에 추가하는 방법은 last = self.head로 놓고 last.next가 None이 경우까지 돌고, last.next에 새로 생성한 NewNode를 추가하고, NewNode.prev를 앞서서 last(기존 마지막 맴버)로 지칭해줍니다.
간단하게 전체 코드를 작성해봤습니다.
class Node:
def __init__(self, value):
self.val = value
self.next = None
self.prev = None
class dlinked_list:
def __init__(self):
self.head = None
def push(self, NewVal):
NewNode = Node(NewVal)
NewNode.next = self.head
if self.head is not None:
self.head.prev = NewNode
self.head = NewNode
def append(self, NewVal):
NewNode = Node(NewVal)
NewNode.next = None
if self.head is None:
NewNode.prev = None
self.head = NewNode
return
last = self.head
while (last.next is not None):
last = last.next
last.next = NewNode
NewNode.prev = last
return
def printlist(self, node):
while (node is not None):
print(node.val),
node = node.next
dllist = dlinked_list()
dllist.push(100)
dllist.append(1000)
dllist.push(200)
dllist.push(300)
dllist.append(900)
dllist.printlist(dllist.head)
위의 예제를 실행하니 다음과 같은 결과를 얻었습다.
300
200
100
1000
900
이번 포스팅에서 앞서 포스팅에서 했던 것에 이어 Double linked list를 가지고 포스팅을 해봤습니다. 몇가지는 이글을 보시는 분들께서 직접 작성하실 수 있게 모든 부분에 대해서는 하지 않았습니다. 혹 질문이나 문의 사항 있으시면 언제든지 댓글 및 방명록에 글 부탁드립니다.
'Python > Python 응용' 카테고리의 다른 글
파이썬[Python] 043 절대값, 반올림 수 구하기 (0) | 2020.02.17 |
---|---|
파이썬[Python] 039 Create/Remove Directory(폴더 생성 , 제거) (0) | 2020.01.21 |
파이썬[Python] 037 linked list 생성 및 활용 (0) | 2020.01.16 |
파이썬[Python] 036 Array(배열) 사용하기 (0) | 2020.01.15 |
파이썬[Python] Project01-04 DBC_Loader, DBC를 Excel로 추출하기 (0) | 2020.01.14 |