ํฐ์คํ ๋ฆฌ ๋ทฐ
๋๋์ด ํ! ์คํ๊ณผ ๋๋ถ์ด ๋งค์ฐ ๋น๋ฒํ๊ฒ ์ด์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํ๋ ์๋ฃ(data element)๋ฅผ ๋ณด๊ดํ ์ ์๋ ์ ํ๊ตฌ์กฐ๋ก ์ ํ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ์คํ๊ณผ ๋น์ทํ์ง๋ง ์คํ๊ณผ๋ ๋ฐ๋์ธ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ํ๋ ๋ฃ์ ๋์๋ ํ ์ชฝ ๋์์ ๋ฐ์ด ๋ฃ์ด์ผ(enqueue์ฐ์ฐ)ํ๊ณ ๊บผ๋ผ ๋์๋ ๋ฐ๋ ์ชฝ์์ ๋ฝ์ ๊บผ๋ด๋(dequeue์ฐ์ฐ) ์ ์ ์ ์ถ(FIFO; First-In First-Out)์ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ ๋์
ํ์ ์ถ์์ ์๋ฃ๊ตฌ์กฐ ๊ตฌํ
1. ๋ฐฐ์ด(array)์ ์ด์ฉํ์ฌ ๊ตฌํ
- python ๋ฆฌ์คํธ์ ๋ฉ์๋๋ค์ ์ด์ฉ
2. ์ฐ๊ฒฐ ๋ฆฌ์คํธ(linked list)๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ
- ์ด์ ์ ๊ตฌํํ ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ด์ฉ
์ฐ์ฐ์ ์ ์
- size() - ํ์ฌ ํ์ ๋ค์ด์๋ ๋ฐ์ดํฐ ์์์ ์๋ฅผ ๊ตฌํจ
- isEmpty() - ํ์ฌ ํ๊ฐ ๋น์ด์๋์ง๋ฅผ ํ๋จ
- enqueue(x) - ๋ฐ์ดํฐ ์์ x๋ฅผ ํ์ ์ถ๊ฐ
- dequeue() - ํ์ ๋งจ ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์์๋ฅผ ์ ๊ฑฐ(๋๋ ๋ฐํ)
- peek() - ํ์ ๋งจ ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์์๋ฅผ ๋ฐํ(์ ๊ฑฐํ์ง ์์)
๋ฐฐ์ด๋ก ๊ตฌํํ ํ
# ๋ฐฐ์ด๋ก ๊ตฌํํ ํ
class ArrayQueue:
# ๋น ํ๋ฅผ ์ด๊ธฐํ
def __init__(self):
self.data = []
# ํ์ ํฌ๊ธฐ๋ฅผ ๋ฆฌํด
def size(self):
return len(self.data)
# ํ๊ฐ ๋น์ด์๋์ง ํ๋จ
def isEmpty(self):
return self.size() == 0
# ๋ฐ์ดํฐ ์์ ์ถ๊ฐ ์ฐ์ฐ
def enqueue(self, item):
self.data.append(item)
# ๋ฐ์ดํฐ ์์ ์ญ์ ์ฐ์ฐ
def dequeue(self):
return self.data.pop(0)
# ํ์ ๋งจ ์ ์์ ๋ฐํ
def peek(self):
return self.data[0]
๋ฐฐ์ด๋ก ๊ตฌํํ ํ์ ์ฐ์ฐ ๋ณต์ก๋
๋ฐ์ดํฐ ์ญ์ ์ฐ์ฐ์ ํ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก ๊ทธ๋งํผ ์ฐ์ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค. ํ์ ๊ธธ์ด์ ๋น๋กํ๋ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ๋ฐฐ์ด์ ๋งจ ์์ ์์๋ฅผ ๊บผ๋ด๋ ๊ฒ์ ์๊ฐํด๋ณด์. ๋งจ ์ ์์๊ฐ ์ญ์ ๊ฐ ๋๋ฉด ๊ทธ ๋ค์ ์๋ ๋ฐ์ดํฐ๋ค์ด ํ๋์ฉ ์์ผ๋ก ๋น๊ฒจ์ ์์ผํ๊ธฐ ๋๋ฌธ์ ํ์ ๊ธธ์ด๋งํผ ์ฐ์ฐ์ด ์ผ์ด๋๋ค.
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํ๋ฅผ ๊ตฌํ
์ฝ๋์ ๊ตฌํ์ ์ฌ์ฐ๋ ์ฐ์ฐ์ ๋ณต์ก๋์ ๋ํด์๋ ์๊ฐ์ ํด๋ณด์์ผํ๋ค.
class Node:
def __init__(self, item):
self.data = item
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.nodeCount = 0
self.head = Node(None)
self.tail = Node(None)
self.head.prev = None
self.head.next = self.tail
self.tail.prev = self.head
self.tail.next = None
def __repr__(self):
if self.nodeCount == 0:
return 'LinkedList: empty'
s = ''
curr = self.head
while curr.next.next:
curr = curr.next
s += repr(curr.data)
if curr.next.next is not None:
s += ' -> '
return s
def getLength(self):
return self.nodeCount
def traverse(self):
result = []
curr = self.head
while curr.next.next:
curr = curr.next
result.append(curr.data)
return result
def reverse(self):
result = []
curr = self.tail
while curr.prev.prev:
curr = curr.prev
result.append(curr.data)
return result
def getAt(self, pos):
if pos < 0 or pos > self.nodeCount:
return None
if pos > self.nodeCount // 2:
i = 0
curr = self.tail
while i < self.nodeCount - pos + 1:
curr = curr.prev
i += 1
else:
i = 0
curr = self.head
while i < pos:
curr = curr.next
i += 1
return curr
def insertAfter(self, prev, newNode):
next = prev.next
newNode.prev = prev
newNode.next = next
prev.next = newNode
next.prev = newNode
self.nodeCount += 1
return True
def insertAt(self, pos, newNode):
if pos < 1 or pos > self.nodeCount + 1:
return False
prev = self.getAt(pos - 1)
return self.insertAfter(prev, newNode)
def popAfter(self, prev):
curr = prev.next
next = curr.next
prev.next = next
next.prev = prev
self.nodeCount -= 1
return curr.data
def popAt(self, pos):
if pos < 1 or pos > self.nodeCount:
raise IndexError('Index out of range')
prev = self.getAt(pos - 1)
return self.popAfter(prev)
def concat(self, L):
self.tail.prev.next = L.head.next
L.head.next.prev = self.tail.prev
self.tail = L.tail
self.nodeCount += L.nodeCount
#################################################
class LinkedListQueue:
def __init__(self):
self.data = DoublyLinkedList()
def size(self):
return self.data.nodeCount
def isEmpty(self):
return self.data.nodeCount==0
def enqueue(self, item):
node = Node(item)
self.data.insertAt(self.size()+1,node)
def dequeue(self):
return self.data.popAt(1)
def peek(self):
return self.data.head.next.data
#################################################
def solution(x):
return 0
์ฐธ๊ณ - ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
from pythons.basic.queue import Queue
Q=Queue()
dir(Q)
'(๊ตฌ)์๋ฃ๊ตฌ์กฐ&์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ์ ์์ ํ (Priority Queues) (0) | 2020.06.25 |
---|---|
ํํ ํ (Circular Queue) (0) | 2020.06.24 |
์คํ์ ์์ฉ - ํ์ ํ๊ธฐ ์์ ๊ณ์ฐ (0) | 2020.06.24 |
์คํ์ ์์ฉ - ์์์ ํ์ ํ๊ธฐ๋ฒ (Postfix Notation) (0) | 2020.06.23 |
์คํ(Stacks) - ์์์ ๊ดํธ ์ ํจ์ฑ ๊ฒ์ฌ (0) | 2020.06.23 |
- Total
- Today
- Yesterday
- ๊ฐ๋ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฒ์๋ฌผ์กฐํ
- ์ดํด๋ฆฝ์ค ํ๊ธ ์ธ์ฝ๋ฉ
- tomcat์ค์น
- java jdk ์ค์น
- Java
- ๊ฒ์ํ ์กฐํ
- ๊ฒ์ํ๋ง๋ค๊ธฐ
- ๊ฒ์ํ ์ญ์
- java ํ๊ฒฝ๋ณ์
- mysql์ค์น
- ์คํ๋ง๋ถํธ ์๋์์ฑ
- typeAliases
- ์๋ฐ
- 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 |