You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python队列前端删除元素异常问题求助(无第三方库)

队列Dequeue功能异常的问题修复

问题原因

你的Dequeue函数存在两个逻辑错误:

  1. 错误递增front索引:执行queue.pop(front)后,列表中剩余元素会自动向前移位填补空缺,此时新的队首元素已经处于原front的位置(索引0),但代码中仍执行front = front +1,导致下次删除时跳过真正的队首元素。
  2. 未更新rear索引:删除元素后,队列长度减少,原rear指向的尾元素索引会前移,但代码中未对rear做递减处理,导致后续队列状态计算(如元素个数)出现偏差。

以你给出的例子为例:

  • 初始队列:[15,25,78,93,41,589],front=0,rear=5
  • 第一次Dequeue:pop(0)删除15,队列变为[25,78,93,41,589],但代码将front设为1,rear仍为5
  • 第二次Dequeue:此时front=1,执行pop(1)会删除索引1的元素78,而非队首的25,这就是异常的根源。

解决方案

修正Dequeue函数的逻辑:

  • 删除元素后,不要递增front,因为列表元素已前移,新的队首仍在索引0的位置
  • 删除元素且队列未空时,将rear递减1,匹配队列长度变化

修正后的Dequeue函数

def dequeue():
    global front, rear, queue
    if (is_queue_empty()):
        print("\nQueue is empty.")
    else:
        item = queue[front]
        queue.pop(front)
        if (front == rear):
            front = -1
            rear = -1
        else:
            # 移除错误的front递增操作,改为递减rear
            rear = rear - 1
        print("\nDeleted element is ", item)

修正后的流程验证

还是用你的初始队列例子:

  1. 初始状态:队列[15,25,78,93,41,589],front=0,rear=5
  2. 第一次Dequeue:pop(0)删除15,队列变为[25,78,93,41,589],rear递减为4,front保持0
  3. 第二次Dequeue:pop(0)删除25,队列变为[78,93,41,589],rear递减为3,front仍为0
  4. 后续删除操作都会正确移除队首元素,符合队列FIFO的特性

完整修正代码

def is_queue_empty():
    if (front == -1):
        return 1
    else:
        return 0


def is_queue_full():
    if (rear == maxsize - 1):
        return 1
    else:
        return 0


def enqueue():
    global front, rear, queue, item
    if (is_queue_full()):
        print("\nQueue is full.")
    else:
        item = int(
            input("\nEnter the item at position " + str(rear + 1) + ": "))
        if (front == -1):
            front = 0
            rear = 0
        else:
            rear = rear + 1
        queue.append(item)


def dequeue():
    global front, rear, queue
    if (is_queue_empty()):
        print("\nQueue is empty.")
    else:
        item = queue[front]
        queue.pop(front)
        if (front == rear):
            front = -1
            rear = -1
        else:
            rear = rear - 1
        print("\nDeleted element is ", item)


# print the list
def display():
    print("\nQueue Size = ", maxsize, ", Number Of Elements In The Queue = ",
          (rear - front) + 1, ", Occupied Space In The Queue = ", rear + 1,
          ", Available Size In The Queue = ", maxsize - (rear + 1))
    if (is_queue_empty()):
        print("\nQueue is empty.")
    else:
        print("\nYour queue: ", queue)


def set_queue_size():
    global maxsize
    maxsize = int(input("Enter the size of the queue: "))


queue = []  # Initializing an empty queue
front = rear = -1

# Driver Code
set_queue_size()

print("\n1. EnQueue")
print("\n2. DeQueue")
print("\n3. Display")
print("\n4. Update the size of the queue")
print("\n5. Exit")

while (1):
    ch = int(input("\nEnter your choice: "))

    if (ch == 1):
        enqueue()
        continue
    elif (ch == 2):
        dequeue()
        continue
    elif (ch == 3):
        display()
        continue
    elif (ch == 4):
        set_queue_size()
        continue
    elif (ch == 5):
        break
    else:
        print("\nWrong choice. Try again")
        continue

内容的提问来源于stack exchange,提问作者user20424685

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:20:33