Triển khai hàng đợi hỗ trợ push/pop tại 3 vị trí: đầu (front), giữa (middle), cuối (back). Cần các phương thức: push_from_front, push_from_middle, push_from_back, pop_from_front, pop_from_middle, pop_from_back, show_queue.
Ví dụ: push_back(10), push_back(20), push_front(30), push_middle(40), push_front(50) → [50,30,40,10,20]. Các pop lần lượt cho [50,30,40,10], [30,40,10], [30,10].
Giải thuật (Danh sách Python)
- Dùng list
arraylưu dữ liệu. push_front:insert(0, val).push_middle:insert(len(array)//2, val).push_back:append(val).pop_front:pop(0)(trả -1 nếu rỗng).pop_middle:pop((len(array)-1)//2).pop_back:pop().show_queue: trả vềarray.
Ví dụ minh họa
class Solution:
def __init__(self):
self.array = []
def push_from_front(self, value):
self.array.insert(0, value)
def push_from_middle(self, value):
self.array.insert(len(self.array) // 2, value)
def push_from_back(self, value):
self.array.append(value)
def pop_from_front(self):
return (self.array or [-1]).pop(0)
def pop_from_middle(self):
return (self.array or [-1]).pop((len(self.array) - 1) // 2)
def pop_from_back(self):
return (self.array or [-1]).pop()
def show_queue(self):
return self.array
ob = Solution()
ob.push_from_back(10)
ob.push_from_back(20)
ob.push_from_front(30)
ob.push_from_middle(40)
ob.push_from_front(50)
print(ob.show_queue())
ob.pop_from_back()
print(ob.show_queue())
ob.pop_from_front()
print(ob.show_queue())
ob.pop_from_middle()
print(ob.show_queue())
Đầu vào
ob = Solution() ob.push_from_back(10) ob.push_from_back(20) ob.push_from_front(30) ob.push_from_middle(40) ob.push_from_front(50) print(ob.show_queue()) ob.pop_from_back() print(ob.show_queue()) ob.pop_from_front() print(ob.show_queue()) ob.pop_from_middle() print(ob.show_queue())
Đầu ra
[50, 30, 40, 10, 20] [50, 30, 40, 10] [30, 40, 10] [30, 10]