카테고리 없음
패스트 캠퍼스 챌린지 7일차 - 자료구조 연결 리스트(Linked List)#4
Jeff-Kim
2021. 9. 12. 20:53
목차
- 더블 링크드 리스트
- 간단한 구현
1.더블 링크드 리스트
- 노드 갯수가 10000개라고 가정하고 찾고자 하는 노드가 대략 9000번째에 있다면 검색하는데 너무 많은 시간이 든다.
- 이때 뒤에서 부터 검색을 할수 있다면 앞에서 부터 찾는것 보다 9배는 빠르게 찾을수 있다.
- 뒤에 오는 노드 뿐만 아니라 앞에있는 노드를 기억하는 List를 Double 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()