728x90

링크드리스트 - linked list
배열의 삽입과 추가가 어려운 것을 해결할 수 있다.
- 장점
- 미리 데이터 공간을 할당하지 않아도 된다.
- 단점
- 배열보다 데이터 공간을 많이 쓴다.
- 저장공간이 비효율적이다.
- 탐색이 어렵다. head부터 시작하기 때문에 원하는 데이터까지 접근속도가 느리다.
- 중간 데이터 삭제 시, 앞뒤 데이터 연결을 재구성 해야 한다.
클래스를 사용하여 구현한다.
class Node :
def __init__(self,data,next=None):
self.data=data
self.next=next
def add(data):
node=head
while node.next:
node=node.next
node.next=Node(data)
node1=Node(1)
head=node1
for index in range(2,10):
add(index)
node=head
while node:
print(node.data)
node=node.next
데이터를 삽입할 때는 다음과 같다.
node=head
search=True
while search :
if node.data==1 :
search=False
else :
node=node.next
node_next=node.next
node.next=node3
node3.next=node_next
파이썬 객체지향 프로그래밍으로 링크드 리스트를 구현한다
class Node :
def __init__(self,data,next=None) :
self.data = data
self.next= next
class NodeMgmt:
def __init__(self,data):
self.head=Node(data)
def add(self,data):
if self.head =='' :
self.head=Node(data)
else :
node=self.head
while node.next :
node=node.next
node.next=Node(data)
def desc(self):
node = self.head
while node :
print(node.data)
node=node.next
linkedlist1=NodeMgmt(0)
linkedlist1.desc()
for data in range(1,10) :
linkedlist1.add(data)
linkedlist1.desc()
특정 노드를 삭제하는 순서
1. head 삭제
2. 마지막 노드 삭제
3. 중간 노드 삭제
class Node :
def __init__(self, data, next=None) :
self.data=data
self.next=next
class NodeMgmt :
def __init__(self, data) :
self.head=Node(data)
def add(self,data) :
if self.head=='' :
self.head = Node(data)
else :
node = self.head
while node.next :
node = node.next
node.next= Node(data)
def desc(self) :
node = self.head
while node :
print(node.data)
node = node.next
def delete(self,data) :
if self. head =='' :
print("no Node.")
return
if self.head.data == data :
temp = self.head
self.head=self.head.next
del temp
else :
node = self.head
while node.next :
if node.next.data == data :
temp = node.next
node.next=node.next.next
del temp
else :
node=node.next
더블링크드리스트 (double linkedlist)
: head 와 tail 모두에서 탐색을 시작할 수 있다.
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
double_linkedlist=NodeMgmt(0)
for data in range(1,10) :
double_linkedlist.insert(data)
double_linkedlist.desc()
'프로그래밍 > Python 자료구조' 카테고리의 다른 글
6. 파이썬 마지막 자료구조 힙 (0) | 2023.01.21 |
---|---|
5. 파이썬 자료구조 트리 Tree, 이진탐색트리 Binary Search Tree (0) | 2023.01.18 |
4. 파이썬 자료구조 해쉬테이블 Hash table (0) | 2023.01.15 |
3. 파이썬 자료구조 알고리즘 시간복잡도 (0) | 2023.01.12 |
1. 파이썬 자료구조 배열, 큐, 스택 (0) | 2023.01.11 |
댓글