ํฐ์คํ ๋ฆฌ ๋ทฐ
์กฐ๊ธ ์ค๋ ์ ์ธ๊ฒ๊ฐ์๋ฐ
ํ๋ก๊ทธ๋๋จธ์ค์์ ์๋ฃ๊ตฌ์กฐ ์๊ณ ๋ฆฌ์ฆ ๊ด๋ จ ๊ฐ์๋ฅผ ๊ตฌ๋งคํ๊ณ ์๊ฐํ๋ค๊ฐ ๋ด๊ฐ ์ค์ค๋ก ๊ตฌํํด๋ด๊ธฐ๊ฐ ์ด๋ ค์์(๋ถ๋ช ํ ์ฌ์ด ๋ถ๋ถ์ผํ ๋ฐ) ์ค๊ฐ์ ์์ ๋ผ๋ฒ๋ฆฐ์ง๊ฐ ๊ฝค ์๊ฐ์ด ์ง๋๊ฒ๊ฐ๋ค. ์์ฆ ์ผ์ ํ๋ฉด์ ๋ฌด์์ ๊ณต๋ถํด์ผํ ์ง ๋ง๋งํดํ๋ค๊ฐ ๋ค์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํํํ ๋ค์ ธ์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๊ฐ์ ์๊ฐ์ ๋ค์ ์์ํ๊ธฐ๋ก ํ๋ค.
์ฒ์ ๋ค์์๋๋ ํ์ด์ฌ์ด๋ผ๋ ์ธ์ด์ ๊ทธ๋ค์ง ์ต์ํ์ง๊ฐ ์์์ (์ง๊ธ๋ ๋ฌผ๋ก ๋ถ์กฑํ์ง๋ง) ์ง๋ฌธ์ ํด๋ ์ดํด๋ฅผ ํ์ง ๋ชปํ์๊ณ ์ดํด๊ฐ ์๋๋ ์์ ๋๋ฒ๋ ธ๋๋ฐ ๊ทธ๋๋ ๋ด๊ฐ ๊ทธ ์ฌ์ด์ ์ด์ง ์ฑ์ฅํ๊ธด ํ๋๋ณด๋ค. ๊ทธ๋ ์ด๋ ต๊ณ ์ดํด๊ฐ ๋์ง ์์๋ ๊ฒ๋ค์ด ๊ทธ๋๋ ์ฝ๊ฒ ํ๋ ค์ ์ด๋ฒ์๋ ๊ผญ ์๊ฐ์ ํด๋ณผ ์๊ฐ์ด๋ค.
์ ์ญ์ ํ๊ธฐ ์ ๊ตฌํํ๊ฑฐ ๊ฐ์๋ฐ!!!!!!!!!!!!!!!!!!!!??
# Node ํด๋์ค
class Node:
# ์์ฑ์
def __init__(self, item):
self.data = item
self.next = None
# LinkedList ํด๋์ค
class LinkedList:
# ์์ฑ์
def __init__(self):
self.nodeCount = 0
self.head = None
self.tail = None
# ๊ทธ๋ฅ ์ถ๋ ฅํด์ฃผ๋ ๋ฉ์๋
def __repr__(self):
if self.nodeCount == 0:
return 'LinkedList: empty'
s = ''
curr = self.head
while curr is not None:
s += repr(curr.data)
if curr.next is not None:
s += ' -> '
curr = curr.next
return s
# 1. ํน์ ์์ ์ฐธ์กฐ
def getAt(self, pos):
# ํน์ ์์น๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ ๋
ธ๋์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด None์ ๋ฐํ
if pos <= 0 or pos > self.nodeCount:
return None
i = 1
curr = self.head # ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ๋
ธ๋๋ฅผ ๊ฐ๋ฅดํด
# i๊ฐ pos๋ณด๋ค ์์ ๋์์ i๋ฅผ ํ๋์ฉ ์ฆ๊ฐ์ํค๋ฉด์ curr๋ฅผ curr์ next๋ฅผ ๊ฐ๋ฅดํค๊ฒ ํ๋ค
# ์ฆ pos-1๋ฒ ๋งํผ ์ ์งํ๋ฉด ๊ทธ๋ curr๊ฐ ๊ฐ๋ฅดํค๋ ๊ฒ์ด ๋ด๊ฐ ๋ฆฌํดํ๋ ค๋ pos๋ฒ์งธ ๋
ธ๋๊ฐ ๋๋ค
while i < pos:
curr = curr.next
i += 1
return curr
# 2. ๋ฆฌ์คํธ ์ํ
def traverse(self):
result = []
curr = self.head
while curr is not None:
result.append(curr.data)
curr = curr.next
return result
# 3. ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฐ์ฐ - ์์์ ์ฝ์
def insertAt(self, pos, newNode):
# pos์ ์์น๊ฐ ์ ํจํ์ง ํ์ธ
if pos < 1 or pos > self.nodeCount + 1 :
# pos์์น๊ฐ ์ฝ์
ํ ์ ์๋ ๋ฒ์ ๋ฐ์ ์์ ๋ False ๋ฐํ
return False
# ๋
ธ๋๋ฅผ ๋งจ ์ฒ์ ์์น์ ์ฝ์ผํ ๋(prev์์)
if pos == 1: # (๋น ๋
ธ๋์ ์ฝ์
ํ ์กฐ๊ฑด์ ๊ฑธ๋ฆผ)
newNode.next = self.head # ์๋ก์ด ๋
ธ๋์ next๋ head
self.head = newNode # ํค๋๊ฐ ์๋ก์ด๋
ธ๋๊ฐ ๋๋ค
# ์ฝ์
ํ๋ ค๋ ์์น๊ฐ ์ฒ์์ด ์๋ ๋
else:
if pos == self.nodeCount + 1: # ์ฝ์
ํ๋ ค๋ ์์น๊ฐ ๋งจ๋์ผ ๋
prev = self.tail # prev == tail๊ณผ ๊ฐ์(์์์ ๋ถํฐ ์ฐพ์ ํ์ ์์)
else: # ์ฝ์
ํ๋ ค๋ ์์น๊ฐ ์ฒ์๋ ์๋๊ณ ๋งจ๋๋ ์๋ ๋
prev = self.getAt(pos-1) # ๋ผ์๋ฃ์ผ๋ ค๋ ์ง์ ์ ์์น๋ฅผ ์ป์ด๋ธ๋ค
newNode.next = prev.next # ์๋ก์ด ๋
ธ๋๊ฐ prev.next๋ฅผ ๊ฐ๋ฅดํค๋๋กํ๋ค.
prev.next = newNode # prev.next๋ฅผ newNode๋ก ํ๋ค
# ๋งจ ๋ง์ง๋ง ์์น์ ์ฝ์
ํ ๋ (๋น ๋
ธ๋์ ์ฝ์
ํ ์กฐ๊ฑด์ ๊ฑธ๋ฆผ)
if pos == self.nodeCount + 1:
self.tail = newNode # Tail์ ์๋ก์ด ๋
ธ๋๋ก ๋ณ๊ฒฝ
# ๋ง์ง๋ง์ผ๋ก ๋
ธ๋์ ๊ฐฏ์ ์ฆ๊ฐ
self.nodeCount += 1
return True
# 4. ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ฐ์ฐ - ์์์ ์ญ์
def popAt(self, pos):
# pop ๊ฐ์ด ์ ํจํ์ง ํ์ธ ์ ๋นํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์๋ฌ๋ฐ์
if pos < 1 or pos > self.nodeCount:
raise IndexError
# ๋งจ ์์ ๋
ธ๋๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ
if pos == 1:
curr = self.head
self.head = self.getAt(pos+1)
# ์ ์ผํ ๋
ธ๋์ธ ๊ฒฝ์ฐ
if self.nodeCount == 1:
self.tail = None
self.head = None
# ๋งจ ์์ ๋
ธ๋๊ฐ ์๋ ๋
else:
prev = self.getAt(pos-1)
curr = self.getAt(pos)
prev.next = curr.next
# ๋งจ ๋ ๋
ธ๋์ผ ๋
if pos == self.nodeCount:
self.tail = prev
r = curr.data
self.nodeCount -= 1
return r
# 5. ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฐ์ฐ - ๋ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ
def concat(self, L):
# ์๋ ๋ฆฌ์คํธ์ ๋งจ ๋์ด ์ด์ด๋ถ์ด๋ ค๋ ๋ฆฌ์คํธ์ ์ฒ์์ผ๋ก
self.tail.next = L.head
# ๋ฆฌ์คํธ L์ด ๋น์ด์์ ๊ฒฝ์ฐ
if L.tail:
self.tail = L.tail
self.nodeCount += L.nodeCount
a = Node(67)
b = Node(34)
c = Node(28)
d = Node(33)
L = LinkedList()
print(L)
print(L.insertAt(1, a))
print(L.insertAt(2, b))
print(L.insertAt(3, c))
print(L)
print(L.insertAt(1, d))
print(L)
print(L.popAt(2))
print(L)
print(L.popAt(1))
print(L)
print(L.popAt(2))
print(L)
'(๊ตฌ)์๋ฃ๊ตฌ์กฐ&์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List) - ๋๋ฏธ ๋ ธ๋ ์ถ๊ฐ (0) | 2020.06.19 |
---|---|
์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List) (0) | 2020.06.18 |
ํ์ด์ฌ ๋๋ ์ ์ ๋ ฅ๋ฐ๊ธฐ (0) | 2020.06.17 |
์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ (recursive algorithms) (0) | 2020.06.17 |
[Python] ๋ณํฉ ์ ๋ ฌ (Merge Sort) (0) | 2020.06.17 |
- Total
- Today
- Yesterday
- java ํ๊ฒฝ๋ณ์
- mysql์ค์น
- ์ดํด๋ฆฝ์ค ํ๊ธ ์ธ์ฝ๋ฉ
- ๊ฐ๋ฐํ๊ฒฝ๊ตฌ์ถ
- ๊ฒ์๋ฌผ ์ญ์
- ์จ๋ฆฌ์์ค
- ์ ์ฒด๊ฒ์๋ฌผ ์กฐํ
- ๊ฒ์ํ ์ญ์
- typeAliases
- ๊ฐ๋ฐ
- ๊ฒ์๋ฌผ์กฐํ
- ์๊ณ ๋ฆฌ์ฆ
- ์ดํด๋ฆฝ์ค ์ค์น
- ์คํ๋ง๋ถํธ ์๋์์ฑ
- java jdk ์ค์น
- ์๋ฃ๊ตฌ์กฐ
- ์๋ฐ
- tomcat์ค์น
- ๊ฒ์ํ๋ง๋ค๊ธฐ
- Java
- ๋ณ๋ช ์ฒ๋ฆฌ
- Algorithm
- ๋ถํธ ์๋์์ฑ
- ๊ฒ์ํ ์กฐํ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |