Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- nginx
- 포맷팅
- 효울적
- check ajax
- Django Ajax
- reCAPTCHA V2
- is_ajax() not working
- 버블 정렬
- 알고리즘
- CleanCode
- Trre heap
- django
- request.GET
- queryset
- request.path
- render html
- HTTP
- 클린코드
- 복수 외래키
- 클린코드-함수
- 선택 정렬
- queryset filter
- Djnago CSRF
- 정렬
- 글자 수
- 클린 코드
- 자료구조
- Proxy_pass
- 트리란
- django 시작하기
Archives
- Today
- Total
Yang 코딩 공부
7. 연결 리스트 2 본문
- 원소의 삽입
- 원소의 삭제
- 두 리스트 합치기
원소의 삽입
코드 구현 주의 사항
(1) 사입하려는 위치가 리스트 맨 앞일 때
prev 없음
Head 조정 필요
(2) 삽입 하려는 위치가 리스트 맨 끝일 때
Tail 조정 필요
(3) 삽입 하려는 리스트가 빈 리스트인 경우
def insertAt(self, pos, newNone)
# pos가 옳바른 위치에 잇는가
if pos <1 or pos > self.nodeCount + 1:
return False
# 첫 위치에 삽입하는 경우
if pos == 1:
newNode.next = self.head
self.head = newNode
else:
if pos == self.nodeCount + 1:
prev = self.tail
else:
prev = self.getAt(pos - 1)
newNode.next = prev.next
prev.next = newNode
# 삽입하련느 위치가 끝인 경우
if pos == self.nodeCount + 1:
self.tail = newNonde
self.nodeCount += 1
return True
연결 리스트 원소 삽입의 복잡도
- 맨앞에 삽입하는 경우: O(1)
- 중간에 삽입하는 경우: O(n)
- 맨 끝에 삽입하는 경우 : O(1) / tail을 가지고 있기때문
연결 리스트 연산 - 원소의 삭제
: pos가 가리키는 위치의 node를 삭제하고 그 node의 데이터를 리턴
코드 구현 주의 사항
- 삭제하려는 node가 맨 앞의 것일 때
- prev 없음
- Head 조정 필요
- 리스트 맨 끝의 node를 삭제할 때
- Tail 조정 필요
- 유일한 노드를 삭제할 경우
코드 구현하기 - 숙제
def popAt(self, pos):
if pos < 1 or pos > self.nodeCount:
raise IndexError
if pos == 1:
curr = self.head
self.head = self.head.next
if self.nodeCount == 1:
self.tail = None
self.head = None
data = curr.data
else:
if pos == self.nodeCount:
prev = self.getAt(pos - 1)
data = prev.next.data
prev.next = None
self.tail = prev
else:
prev = self.getAt(pos - 1)
curr = prev.next
next_ = curr.next
prev.next = next_
data = curr.data
self.nodeCount -= 1
return data
연결 리스트 원소 삭제의 복잡도
- 맨앞에서 삭제하는 경우: O(1)
- 중간에서 삭제하는 경우: O(n)
- 맨 끝에서 삭제하는 경우 : O(n)
연결 리스트 연산 - 두 리스트의 연결
def concat(self.L):
self.tail.next = L.head
if L.tail:
self.tail = L.tail
self.node Count == L.nodeCount
연결 리스트 장점
: 삽입과 삭제를 자연스럽게 할 수있다.
'자료구조' 카테고리의 다른 글
Heap - binary heap (0) | 2022.10.21 |
---|---|
트리(Tree) - 기초 및 용어 (1) | 2022.09.23 |
6. 연결 리스트 (Linked Lists) (1) (0) | 2022.07.21 |
5. 알고리즘의 복잡도 (0) | 2022.07.21 |
4. 재귀 알고리즘 응용 (0) | 2022.07.20 |