python中的循环数组类

时间:2011-09-16 21:58:13

标签: python class circular-buffer

我有一个创建循环数组类的项目,我将使用的语言是python。我是python中的新手,但在阅读了一些网页和书籍章节后,我想我已经了解它们是如何工作的。但是我需要帮助,所以我想我会来这里的优秀老师:)

我们班必须能够实施多项操作;在前面插入,在后面插入,在索引处插入,从前面移除,从后面移除,从索引中移除。

我已经开始编码但遇到了一些问题,而且我不能100%确定我的语法是否正确。

这是我到目前为止所做的:

class circular:

    def __init__(self):
        self.store = []
        self.capacity = len(self.store)
        self.size = 0
        self.startIndex = 0
        self.endIndex = 0

    def decrementIndex(self):
        index = index - 1
        if index < 0:
            self.store = self.store + self.capacity

    def incrementIndex(self):
        index = index + 1
        if index == self.capacity:
            index = index - self.capacity

    def addToBack(self, value):
        self.store[self.endIndex] = value
        self.endIndex = incrementIndex(self.endIndex)
        self.size += 1

    def addToFront(self, value):
        if self.size == 0:
            addToBack(self, value)
        else:
            self.startIndex = decrementIndex(self.startIndex)
            self.store[self.startIndex] = value
            self.size += 1

我在那里开始测试一些功能,主要是addTofront和addToback。在使用c = circular()和c.addToBack(2)在IDLE中测试它时,我得到一个索引错误......我不知道为什么。这不是唯一的问题,只是我遇到困难并需要向前推进的帮助。

我在这里发帖是因为我需要帮助而想要学习,不是因为我懒惰而且没有尝试研究我的问题。非常感谢SO!

1 个答案:

答案 0 :(得分:1)

__init__中设置

self.store = []

addToBack你做

self.store[self.endIndex] = value

如果这是圆形阵列上的第一个操作,并且您将2作为value传递,则转为

[][0] = 2

问题应该是显而易见的 - 空列表没有0的索引,它根本没有索引。

您需要以不同的方式将项目添加到列表中。

我不会准确地告诉你如何解决这个问题。