Python 프로그래밍으로 이중 체인 테이블, 창고, 대기열 및 두 갈래 트리를 실현하는 방법 예시
1. 더블 체인 시계
class Node(object):
def __init__(self, value=None):
self._prev = None
self.data = value
self._next = None
def __str__(self):
return "Node(%s)"%self.data
class DoubleLinkedList(object):
def __init__(self):
self._head = Node()
def insert(self, value):
element = Node(value)
element._next = self._head
self._head._prev = element
self._head = element
def search(self, value):
if not self._head._next:
raise ValueError("the linked list is empty")
temp = self._head
while temp.data != value:
temp = temp._next
return temp
def delete(self, value):
element = self.search(value)
if not element:
raise ValueError('delete error: the value not found')
element._prev._next = element._next
element._next._prev = element._prev
return element.data
def __str__(self):
values = []
temp = self._head
while temp and temp.data:
values.append(temp.data)
temp = temp._next
return "DoubleLinkedList(%s)"%values
2. 창고
class Stack(object):
def __init__(self):
self._top = 0
self._stack = []
def put(self, data):
self._stack.insert(self._top, data)
self._top += 1
def pop(self):
if self.isEmpty():
raise ValueError('stack ')
self._top -= 1
data = self._stack[self._top]
return data
def isEmpty(self):
if self._top == 0:
return True
else:
return False
def __str__(self):
return "Stack(%s)"%self._stack
3. 대기열
class Queue(object):
def __init__(self, max_size=float('inf')):
self._max_size = max_size
self._top = 0
self._tail = 0
self._queue = []
def put(self, value):
if self.isFull():
raise ValueError("the queue is full")
self._queue.insert(self._tail, value)
self._tail += 1
def pop(self):
if self.isEmpty():
raise ValueError("the queue is empty")
data = self._queue.pop(self._top)
self._top += 1
return data
def isEmpty(self):
if self._top == self._tail:
return True
else:
return False
def isFull(self):
if self._tail == self._max_size:
return True
else:
return False
def __str__(self):
return "Queue(%s)"%self._queue
4. 두 갈래 나무(정의 및 반복)
class Node:
def __init__(self,item):
self.item = item
self.child1 = None
self.child2 = None
class Tree:
def __init__(self):
self.root = None
def add(self, item):
node = Node(item)
if self.root is None:
self.root = node
else:
q = [self.root]
while True:
pop_node = q.pop(0)
if pop_node.child1 is None:
pop_node.child1 = node
return
elif pop_node.child2 is None:
pop_node.child2 = node
return
else:
q.append(pop_node.child1)
q.append(pop_node.child2)
def traverse(self): #
if self.root is None:
return None
q = [self.root]
res = [self.root.item]
while q != []:
pop_node = q.pop(0)
if pop_node.child1 is not None:
q.append(pop_node.child1)
res.append(pop_node.child1.item)
if pop_node.child2 is not None:
q.append(pop_node.child2)
res.append(pop_node.child2.item)
return res
def preorder(self,root): #
if root is None:
return []
result = [root.item]
left_item = self.preorder(root.child1)
right_item = self.preorder(root.child2)
return result + left_item + right_item
def inorder(self,root): #
if root is None:
return []
result = [root.item]
left_item = self.inorder(root.child1)
right_item = self.inorder(root.child2)
return left_item + result + right_item
def postorder(self,root): #
if root is None:
return []
result = [root.item]
left_item = self.postorder(root.child1)
right_item = self.postorder(root.child2)
return left_item + right_item + result
t = Tree()
for i in range(10):
t.add(i)
print(' :',t.traverse())
print(' :',t.preorder(t.root))
print(' :',t.inorder(t.root))
print(' :',t.postorder(t.root))
출력 결과:
: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
: [0, 1, 3, 7, 8, 4, 9, 2, 5, 6]
: [7, 3, 8, 1, 9, 4, 0, 5, 2, 6]
: [7, 8, 3, 9, 4, 1, 5, 6, 2, 0]
Python 관련 내용에 관심이 있는 더 많은 독자들은 본 사이트의 주제를 볼 수 있습니다:,,,,, 등
본 논문이 여러분의Python 프로그램 설계에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.