[データ構造]リンクリスト
13267 ワード
lINKED lIST
接続リストは、データ要素の線形集合であり、データの順序は物理的な順序でメモリに格納されません。
アレイ接続リストk番目の要素のアクセスO(1)O(k)任意の場所追加/削除要素O(N)O(1)メモリ上の配置連続不連続追加所要空間(Overhead)-O(N)
接続リストはコンピュータ科学の中で配列とともに最も基本的な代表的な線形資料構造の一つであり,多様な抽象資料型(ADT)を実現する基礎である.
新しいノードを動的に挿入または削除しやすく、接続構造で物理メモリを連続的に使用する必要がないため、管理が容易です.さらに、データを構造に整理し、ポインタにリンクする概念は、様々な方法で広く応用することができる.
探索にはO(n)が必要ですが、なぜですか?->特定のインデックスにアクセスするには、インデックス全体を順番に読み込む必要があります.
始点または終点を追加、削除、またはO(1)を追加、削除または抽出できます.
ArrayとTradeOffの関係(出典:ライフコード)
接続の方向によって、3種類あります
リンクリストのメリットとデメリット
長所
短所
Implementing Linked List
class Node:
def __init__(self, item):
self.val = item
self.next = None
class LinkedList:
def __init__(self, item):
self.head = Node(item)
# head는 초기 시작 노드를 말한다.
# 추가 메소드
def add(self, item):
cur = self.head
# cur는 현재 찍고 있는 노드를 의미한다. (포인터 개념)
while cur.next is not None:
cur = cur.next
cur.next = Node(item)
# 삭제 메소드
def remove(self, item):
if self.head.val == item:
self.head = self.head.next
else:
cur = self.head
while cur.next is not None:
if cur.val == item:
self.removeItem(item)
return
cur = cur.next
print("item does not exist in linked list")
def removeItem(self, item):
cur = self.head
while cur.next is not None:
if cur.next.val == item:
nextnode = cur.next.next
cur.next = nextnode
break
# 출력 메소드
def printlist(self):
cur = self.head
print("HEAD:: ", end='')
while cur is not None:
print(cur.val, '->', end=' ')
cur = cur.next
if cur is None:
print('empty')
# linked list size 출력 메소드
def size(self):
cur = self.head
count = 0
while cur:
count += 1
cur = cur.next
return count
# 탐색 메소드
def search(self, data):
check = self.head
for i in range(self.size()):
if check.val == data:
print(data, "The data is at the {} index.".format(i+1))
return None
check = check.next
print(data, "Data does not exist in linked list")
return None
linked = LinkedList(2)
linked.add(3)
linked.add(4)
linked.add(5)
linked.printlist()
linked.remove(3)
linked.printlist()
linked.search(5)
print(linked.size())
# HEAD:: 2 -> 3 -> 4 -> 5 -> empty
# HEAD:: 2 -> 4 -> 5 -> empty
# 5 The data is at the 3 index.
# 3
Reference
この問題について([データ構造]リンクリスト), 我々は、より多くの情報をここで見つけました https://velog.io/@kanamycine/자료구조-Linked-Listテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol