-
자료구조 링크드 리스트(Linked List)4자료구조와 알고리즘 2020. 10. 22. 15:42
다양한 링크드 리스트 구조
만약에 링크드 리스트 노드가 만개라면 찾고자 하는 데이터가 하필 만번이라면 첨부터 만까지 검색해야 되니까 시간이 걸린다. 근데 끝에서 부터 검색을 할 수 있다면 좋겠다. 내가 찾고자 하는 데이터의 범위를 알면 조금더 빠르게 데이터를 찾을수 있지 않을까해서 나온 더블링크드 리스트
이전주소 데이터 1 다음주소 →
←이전주소 데이터 2 다음주소 class Node: def __init__(self, data, prev=None, next=None): self.prev = prev self.data = data self.next = next class NodeMgmt: def __init__(self, data): self.head = Node(data) self.tail = self.head def insert(self, data): if self.head == None: self.head = Node(data) self.tail = self.head else: node = self.head while node.next: node = node.next new = Node(data) node.next = new new.prev = node self.tail = new def desc(self): node = self.head while node: print (node.data) node = node.next
오 위의 그림을 보면서 이해하니 쉽군요
더블 링크드 리스트 값 추가하기
class Node: def __init__(self, data, prev=None, next=None): self.prev = prev self.data = data self.next = next class NodeMgmt: def __init__(self, data): self.head = Node(data) self.tail = self.head def insert(self, data): if self.head == None: self.head = Node(data) self.tail = self.head else: node = self.head while node.next: node = node.next new = Node(data) node.next = new new.prev = node self.tail = new def desc(self): node = self.head while node: print (node.data) node = node.next def search_from_head(self, data): if self.head == None: return False node = self.head while node: if node.data == data: return node else: node = node.next return False def search_from_tail(self, data): if self.head == None: return False node = self.tail while node: if node.data == data: return node else: node = node.prev return False def insert_before(self, data, before_data): if self.head == None: self.head = Node(data) return True else: node = self.tail while node.data != before_data: node = node.prev if node == None: return False new = Node(data) before_new = node.prev before_new.next = new new.prev = before_new new.next = node node.prev = new return True
연습4: 위 코드에서 노드 데이터가 특정 숫자인 노드 뒤에 데이터를 추가하는 함수를 만들고, 테스트해보기
- 더블 링크드 리스트의 head 에서부터 다음으로 이동하며, 특정 숫자인 노드를 찾는 방식으로 함수를 구현하기
- 테스트: 임의로 0 ~ 9까지 데이터를 링크드 리스트에 넣어보고, 데이터 값이 1인 노드 다음에 1.7 데이터 값을 가진 노드를 추가해보기class Node: def __init__(self, data, prev=None, next=None): self.prev = prev self.data = data self.next = next class NodeMgmt: def __init__(self, data): self.head = Node(data) self.tail = self.head def insert_before(self, data, before_data): if self.head == None: self.head = Node(data) return True else: node = self.tail while node.data != before_data: node = node.prev if node == None: return False new = Node(data) before_new = node.prev before_new.next = new new.next = node return True def insert_after(self, data, after_data): if self.head == None: self.head = Node(data) return True else: node = self.head while node.data != after_data: node = node.next if node == None: return False new = Node(data) after_new = node.next new.next = after_new new.prev = node node.next = new if new.next == None: self.tail = new return True def insert(self, data): if self.head == None: self.head = Node(data) else: node = self.head while node.next: node = node.next new = Node(data) node.next = new new.prev = node self.tail = new def desc(self): node = self.head while node: print (node.data) node = node.next
node_mgmt = NodeMgmt(0) for data in range(1, 10): node_mgmt.insert(data) node_mgmt.insert_after(1.5, 1) node_mgmt.desc()
0
1
1.5
2
....
9
'자료구조와 알고리즘' 카테고리의 다른 글
자료구조 해쉬 테이블 (0) 2020.10.23 시간 복잡도 (0) 2020.10.23 자료구조 링크드 리스트(Linked List)3 (0) 2020.10.22 자료구조 링크드 리스트(Linked List)2 (0) 2020.10.21 자료구조 링크드 리스트(Linked List) (0) 2020.10.21