Stack Is Full
Stack Is Full
def pop(self):
if self.is_empty():
print("stack is empty")
return
popped_item = self.list[self.top]
self.list.pop(self.top)
self.top -= 1
return popped_item
def is_empty(self):
return self.top == -1 : )Dynamic Stack( پشته پویا
def is_full(self):
class dynamic_stack:
return self.top == self.limit - 1
def __init__(self):
self.top = -1
def show(self): # or showV()
self.list = []
if self.is_empty():
print("stack is empty")
def push(self, item):
return
self.list.append(item)
data = []
self.top += 1
for i in range(self.top + 1):
data.append(self.list[i])
def pop(self):
return data
if self.is_empty():
print("stack is empty")
def peek(self): # or top()
return
if self.top == -1:
popped_item = self.list[self.top]
print("stack is empty")
self.list.pop()
return
self.top -= 1
return self.list[self.top]
return popped_item
def clear(self):
self.top = -1
self.list = []*self.limit
class queue():
)Queue( صف
def __init__(self,size=100):
self.front = -1
یک ساختمان داده است که بر اساس اصل "اولین، مانند پشته،صف
self.rear = -1
self.limit = size
.) عمل میکندFIFO - First In, First Out( " اولین خروجی،ورودی
self.list = [None]*size
def enqueue(self,item):
if self.is_full():
print("queue is full")
return
if self.rear == -1:
self.front = 0
self.rear = 0
self.list[self.rear] = item
return
self.rear += 1
self.list[self.rear] = item
def dequeue(self):
if self.is_empty():
print("queue is empty")
return
self.front += 1
def is_empty(self):
return self.rear == -1
def is_full(self):
return self.rear == self.limit - 1
def enqueue(self,item):
if self.is_full():
print("queue is full")
return
if self.is_empty():
self.front = self.rear = 0
self.list[0] = item
return
self.rear = (self.rear + 1) % self.limit
self.list[self.rear] = item
def dequeue(self):
if self.is_empty():
print("queue is empty")
return
if self.front == self.rear:
self.front , self.rear = -1 , -1
return
def showIV(self):
self.front = (self.front + 1) % self.limit
if self.rear == self.front:
return None
def is_empty(self):
data = []
return self.rear == -1
i = self.rear + 1
while True:
def is_full(self):
if self.list[i] == None:
return (self.rear + 1) % self.limit == self.front
pass
else:
def showV(self):
data.append(self.list[i])
if self.rear == self.front:
if i == self.front - 1:
return None
break
data = []
i = (i + 1) % self.limit
i = self.front
return data
while True:
data.append(self.list[i])
if i == self.rear:
break
i = (i + 1) % self.limit
return data
class Node:
def __init__(self, data): )Singly Linked List( لیست پیوندی یک طرفه
self.data = data
self.next = None
class singly_linked_list:
def __init__(self):
self.head = None
def insert_after(self,prev_node,value):
if self.head is None:
return "Error"
current = self.head
if current.next is None:
if current.data == prev_node:
new_node = Node(value) def is_find(self, value):
new_node.next = current.next
current.next = new_node def replace(self, old_value, new_value):
class Node:
def __init__(self, data):
self.data = data
self.next = None
class circular_singly_linked_list:
def __init__(self):
self.head = None
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class doubly_linked_list:
def __init__(self):
self.head = None
class Node:
def __init__(self, key): def inorder(self, node):
self.left = None if node:
self.right = None self.inorder(node.left)
self.val = key print(node.key, end=' ')
self.inorder(node.right)
def insert(self, key):
new_node = Node(key) def preorder(self, node):
if not self.root: if node:
self.root = new_node print(node.key, end=' ')
return self.preorder(node.left)
queue = [self.root] self.preorder(node.right)
while queue:
temp = queue.pop(0) def postorder(self, node):
if not temp.left: if node:
temp.left = new_node self.postorder(node.left)
return self.postorder(node.right)
else: print(node.key, end=' ')
queue.append(temp.left)
if not temp.right: def level_order(self):
temp.right = new_node if not self.root:
return return
else: queue = [self.root]
queue.append(temp.right) while queue:
temp = queue.pop(0)
def search(self, key): print(temp.key, end=' ')
if not self.root: if temp.left:
return False queue.append(temp.left)
queue = [self.root] if temp.right:
while queue: queue.append(temp.right)
node = queue.pop(0)
if node.key == key:
return True
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return False
return stack.pop()
. {} را بررسی کند و تشخیص دهد آیا پرانتزها به درستی بسته شدهاند یا خیر,][ ,)( تابعی بنویسید که یک رشته شامل پرانتزهای.2
def is_balanced(expression):
stack = []
pairs = {')': '(', ']': '[', '}': '{'}
return len(stack) == 0
class QueueWithTwoStacks:
یک صف را با استفاده از دو پشته پیاده سازی کنید.3
def __init__(self):
self.stack_in = []
self.stack_out = []
def dequeue(self):
if self.stack_out:
while self.stack_in:
self.stack_out.append(self.stack_in.pop())
if not self.stack_out:
print("Queue is empty")
return self.stack_out.pop()
def is_empty(self):
return not self.stack_in and not self.stack_out
class Node:
def __init__(self, data, priority): ) باPriority Queue( یک صف اولویت دار.4
self.data = data
.استفاده از لیست پیوندی پیاده سازی کنید
self.priority = priority
self.next = None
class PriorityQueue:
def __init__(self):
self.front = None
def is_empty(self):
return self.front is None
def dequeue(self):
if self.is_empty():
print("Queue is empty!")
return None
removed = self.front
self.front = self.front.next
return removed.data
class Node:
الگوریتمی بنویسید که تشخیص دهد آیا یک لیست.5
def __init__(self, data):
self.data = data .پیوندی دارای حلقه است یا خیر
self.next = None
def has_cycle(head):
slow = head
fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return False
class Node:
تابعی بنویسید که یک لیست پیوندی را به صورت.6
def __init__(self, data): . گره) معکوس کندk گروهی (هر
self.data = data
self.next = None
if count == k:
reversed_head = reverse_k_group(current, k)
current = head
for _ in range(k):
next_node = current.next
current.next = reversed_head
reversed_head = current
current = next_node
head = reversed_head
return head
def print_list(node):
while node:
print(node.data, end=" → " if node.next else "\n")
node = node.next
class Node: الگوریتمی بنویسید که یک درخت دودویی را به.7
def __init__(self, x):
صورت مورب پیمایش کند و مقادیر هر مورب را
self.data = x
self.left = None )diagonal traversal( .چاپ کند
self.right = None
def diagonal(root):
ans = []
levelData = {}
diagonalRecur(root, 0, levelData)
level = 0
while level in levelData:
ans.extend(levelData[level])
level += 1
return ans
.) دریافت کند و کوچکترین جد مشترک آنها را برگرداندBST( تابعی بنویسید که دو گره در یک درخت جستجوی دودویی.8
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def inorder_iterative(root):
stack = []
current = root
while stack or current:
while current:
stack.append(current)
current = current.left
current = stack.pop()
print(current.data, end=" ")
current = current.right
class Node:
def __init__(self, key, value):
را باLRU (Least Recently Used) یک سیستم کش.10
self.key = key ترکیب یک صف (بر اساس لیست پیوندی) و یک هش مپ
self.value = value
. را شرح دهیدput وget پیادهسازی کنید و عملیات
self.prev = None
self.next = None
class LRUCache:
def __init__(self, capacity):
self.capacity = capacity
self.cache = dict()
self.head = Node(0, 0)
self.tail = Node(0, 0)
self.head.next = self.tail
self.tail.prev = self.head
class LinkedStack:
def __init__(self):
self.top = None
def is_empty(self):
return self.top is None
def pop(self):
if self.is_empty(): def display(self):
return value
def find_lca(root, n1, n2):
کوچک ترین جد مشترک دو گره در یک درخت دودویی.13
if root is None:
return None )BT(
if root.val == n1 or root.val == n2: مراجعه کنید8 به سوالclass node برای •
return root
left_lca = find_lca(root.left, n1, n2)
right_lca = find_lca(root.right, n1, n2)
if left_lca and right_lca:
return root
return left_lca if left_lca is not None else right_lca
lca = None
for u, v in zip(path1, path2):
if u.data == v.data:
lca = u
else:
break
return lca