Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình triển khai hàng đợi đẩy/lấy từ đầu, giữa, cuối trong Python

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)

  1. Dùng list array lưu dữ liệu.
  2. push_front: insert(0, val).
  3. push_middle: insert(len(array)//2, val).
  4. push_back: append(val).
  5. pop_front: pop(0) (trả -1 nếu rỗng).
  6. pop_middle: pop((len(array)-1)//2).
  7. pop_back: pop().
  8. 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]