-
패스트 캠퍼스 챌린지 7일차 - 자료구조 연결 리스트(Linked List)#4카테고리 없음 2021. 9. 12. 20:53
목차
- 더블 링크드 리스트
- 간단한 구현
1.더블 링크드 리스트
- 노드 갯수가 10000개라고 가정하고 찾고자 하는 노드가 대략 9000번째에 있다면 검색하는데 너무 많은 시간이 든다.
- 이때 뒤에서 부터 검색을 할수 있다면 앞에서 부터 찾는것 보다 9배는 빠르게 찾을수 있다.
- 뒤에 오는 노드 뿐만 아니라 앞에있는 노드를 기억하는 List를 Double Linked List라 한다.
출처: wikipedia, https://en.wikipedia.org/wiki/Linked_list
2.간단한 구현
#Node 정의 class Node: def __init__(self,data,prev=None,next=None): self.prev=prev self.data=data self.next=next #DoubleLinkedList class DoubleLinkedList: 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 print("find: ",node.data) 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 #------------------------------------------------------------------------------ double=DoubleLinkedList(0) #추가 for data in range(1,10): double.insert(data) double.desc() #타겟 노드 뒤에 넣기 double.insert_after(1.5,1) print("") double.desc() print("") #타겟 노드 앞에 넣기 double.insert_before(1.3,1) print("") double.desc()