추상적 자료구조(Abstract Data Structures)
Data
- 정수, 문자열, 레코드, ...
A set of operations
- 삽입, 삭제, 순회, ...
- 정렬, 탐색, ...
기본적 연결 리스트
Node
- Node: Data + link (next)
- Node 내의 데이터는 다른 구조로 이루어질 수 있음 (예) 문자열, 레코드, 또 다른 연결 리스트 등
- 리스트의 맨 앞 노드: Head (위에선 67)
- 리스트이 맨 뒤 노드: Tail (위에선 58)
- # of nodes: 3
자료 구조 정의
Node
- Data
- Link (next)
# Node
class Node:
def __init__(self,item):
self.data = item #67
self.next = None #다음 노드를 가리키는 포인터
비어 있는 연결 리스트
# 비어 있는 연결 리스트
class LinkedList:
def __init__(self):
self.nodeCount = 0
self.head = None
self.tail = None
연산 정의
- 특정 원소 참조 (k번째)
- 리스트 순회
- 길이 얻어내기
- 원소 삽입
- 원소 삭제
- 두 리스트 합치기
1. 특정 원소 참조
def getAt(self, pos):
if pos <= 0 or pos > self.nodeCount:
return None
i=1
curr=self.head
while i < pos:
curr = curr.next
i+=1
return curr
배열과 비교한 연결 리스트
배열 | 연결 리스트 | |
저장 공간 | 연속한 위치 | 임의의 위치 |
특정 원소 지칭 | 매우 간편 O(1) |
선형 탐색과 유사 O(n) |
실습 과제 - 연결 리스트 순회
class Node:
def __init__(self, item):
self.data = item
self.next = None
class LinkedList:
def __init__(self):
self.nodeCount = 0
self.head = None
self.tail = None
def getAt(self, pos):
if pos < 1 or pos > self.nodeCount:
return None
i = 1
curr = self.head
while i < pos:
curr = curr.next
i += 1
return curr
def traverse(self):
answer=[]
i=1
curr = self.head
while i <= self.nodeCount:
answer.append(curr.data)
curr = curr.next
i+=1
return answer
# 이 solution 함수는 그대로 두어야 합니다.
def solution(x):
return 0
* 프로그래머스의 '어서와! 자료구조와 알고리즘은 처음이지?' 강의를 듣고 정리하였습니다.
'알고리즘 강의' 카테고리의 다른 글
[알고리즘 강의] 파트9. 연결 리스트(Linked Lists) (3) (0) | 2021.07.15 |
---|---|
[알고리즘 강의] 파트8. 연결 리스트(Linked Lists) (2) (0) | 2021.07.14 |
[알고리즘 강의] 파트6. 알고리즘의 복잡도(Complexity of Algorithms) (0) | 2021.07.13 |
[알고리즘 강의] 파트5. 재귀 알고리즘(Recursive Algorithms) 응용 (0) | 2021.07.13 |
[알고리즘 강의] 파트4. 재귀 알고리즘(Recursive Algorithms) 기초 (0) | 2021.07.13 |