Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在应用此代码时出现此错误。我已经附上了下面的错误和代码?_Python_List_Data Structures_Stack_Queue - Fatal编程技术网

Python 为什么在应用此代码时出现此错误。我已经附上了下面的错误和代码?

Python 为什么在应用此代码时出现此错误。我已经附上了下面的错误和代码?,python,list,data-structures,stack,queue,Python,List,Data Structures,Stack,Queue,由于列表中没有任何元素,因此出现错误 如果列表的索引i 如果要添加元素,可以使用list.append(元素) 您的功能变为: class Queue: def __init__(self,size): self.front=self.rear=-1 self.Q=list() self.size=size def empty(self): return self.front==self.rear def f

由于列表中没有任何元素,因此出现错误

如果列表的索引
i

如果要添加元素,可以使用
list.append(元素)

您的功能变为:

class Queue:
    def __init__(self,size):
        self.front=self.rear=-1
        self.Q=list()
        self.size=size
    def empty(self):
        return self.front==self.rear
    def full(self):
        return self.rear==self.size-1
    def enqueue(self,item):
        if self.full():
            print("Stack Overflow")
            return
        else:
            self.rear+=1
            self.Q[self.rear]=item
    def dequeue(self):
        if self.empty():
            print("Stack Underflow")
            return 
        else:
            a=-1
            self.front+=1
            a=self.Q[self.front]
            return a

如果你能详细解释一下为什么要使用前后等,我可以帮你更多。

原因很简单。您将获得一个
索引器
,这意味着您正试图读取/写入列表中不存在的索引。解决这一问题的关键是在
\uuuu init\uuu
方法中使用
None
0
初始化列表

拟议的解决办法

在这里,列表中填充了
size
number of
None
值。这使得使用索引访问值成为可能。

您的Q为空,包含0个元素,您正试图修改位置1不存在的元素。上面的代码是使用我计算的数组实现的队列,但我的观点仍然有效。您应该在我可以追加之前追加或定义大小,但我没有使用append方法和您的第二个问题来执行此操作。我已经在语法中定义了大小。您已经定义了
size
,但arr的长度仍然为0
self.Q=list()
的大小应该类似于
self.Q=[None]*5
。但让固定长度队列使用
append
没有多大意义。还有
collections.deque
存在,所以您也可以使用它。非常感谢!!。我的代码正在运行,实际上我忘记了添加none值。如果这有帮助,您可以接受此答案并对其进行投票…:)在几次调用
排队
后,这仍然会导致问题;应该有一种机制来调整队列的大小,或者至少是重新居中队列,因为当用户在排队和退队之间交替时,队列正在漂移。@TanayDuggad在应用Melvin的修复后,请尝试以下代码:
q=queue(10)
for i in range(20):print(i)q.enqueue(i)q.dequeue()
@TanayDuggad用户希望它能正常工作,因为队列中的元素永远不会超过一个。然而,在添加和删除第十个元素之后,队列溢出,无法再添加任何元素。你们明白为什么吗?我的代码终于开始运行了,因为我在创建数组时忘记了向索引中添加None值。谢谢你们的贡献。我添加了后部和前部,因为我们可以添加后部索引,而我们可以根据队列的FIFO原则从顶部索引弹出。这导致了O(1)时间复杂度
def enqueue(self,item):
        if self.full():
            print("Stack Overflow")
            return
        else:
            self.rear+=1
            self.Q.append(item)
def __init__(self, size):
    self.front = self.rear=-1
    self.size = size

    self.Q = [None for i in range(self.size)]    # Initializes the list with `None` values