堆叠 家庭作业帮助服务 - Assignment Help

堆叠家庭作业帮助

正如我们所描述的Python一样,像任何面向对象的编程语言一样,抽象数据类型(如堆栈)的选择实现是创建一个新类。堆栈操作被实现为方法。

现在我们已经将堆栈清楚地定义为抽象数据类型,我们将把注意力转向使用Python来实现堆栈。回想一下,当我们给出抽象数据类型一个物理实现时,我们将实现称为数据结构。

正如我们在1中所述,在Python中,像任何面向对象的编程语言一样,抽象数据类型(如堆栈)的选择实现是创建一个新类。堆栈操作被实现为方法。此外,为了实现一个堆栈,它是一个元素的集合,使用Python提供的原始集合的功能和简单性是有意义的。我们将使用一个列表。

回想一下,Python中的list类提供了一个有序的收集机制和一组方法。例如,如果我们有列表[2,5,3,6,7,4],我们只需要决定列表的哪个端将被认为是堆栈的顶端,哪个是基础。一旦作出了这个决定,可以使用诸如append和pop这样的列表方法实现操作。

以下堆栈实现(ActiveCode 1)假定列表的末尾将保存堆栈的顶部元素。随着堆栈增长(随着推送操作的发生),新项目将被添加到列表的末尾。流行操作将操纵同一端。

这种在保持逻辑特征的同时改变抽象数据类型的物理实现的能力就是工作中抽象的一个例子。然而,即使堆栈将以任何一种方式工作,如果我们考虑两种实现的性能,那肯定是有区别的。回想一下,append和pop()操作都是O(1)。这意味着无论堆栈中有多少项目,第一个实现将在不间断的时候执行push和pop。第二个实现的性能是因为insert(0)和pop(0)操作都将对于大小为n的堆栈都要求O(n)。显然,尽管这些实现在逻辑上是等效的,但是当执行基准测试时,它们将具有非常不同的时序。

使用Python列表实现堆栈

Python提供的列表操作与定义堆栈的操作类似。界面不完全是它应该是,但我们可以编写代码从Stack ADT转换到内置操作。

该代码称为Stack ADT的实现。一般来说,实现是一组满足接口语法和语义要求的方法。

这是一个使用Python列表的Stack ADT的实现:

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12级堆栈:

    def __init __(self):

        self.items = []

def push(self,item):

        self.items.append(item)

def pop(自):

        return self.items.pop()

  def is_empty(self):

        return(self.items == [])

Stack对象包含一个名为items的属性,它是堆栈中项目的列表。初始化方法将itemsto设置为空列表。

要将一个新项目推到堆栈上,请将其追加到项目上。要从堆栈中弹出一个项目,pop使用同名(同名)列表方法来删除并返回列表中的最后一个项目。

最后,为了检查堆栈是否为空,is_empty将项目与空列表进行比较。

这样的实现,其中方法包括现有方法的简单调用,称为单板。在现实生活中,单板是用于家具制造的优质木材的薄涂层,以隐藏下面的低质量木材。计算机科学家使用这个比喻来描述隐藏实现细节的一小段代码,并提供一个更简单或更标准的界面。

25.4。推挤和弹出

堆栈是通用数据结构,这意味着我们可以添加任何类型的项目。以下示例将两个整数和一个字符串推送到堆栈上:

>>> s = Stack()

>>> s.push(54)

>>> s.push(45)

>>> s.push(“+”)

我们可以使用is_empty和pop来删除和打印堆栈上的所有项目:

1

2 while而不是s.is_empty():

    print(s.pop(),end =“”)

输出是+ 45 54.换句话说,我们只是用一个堆栈来向后打印项目!有可能,它不是打印列表的标准格式,而是使用堆栈,这是非常容易做到的。

你应该将这一段代码与最后一个print_backward的实现进行比较。在print_backward的递归版本和堆栈算法之间有一个自然的并行。区别在于print_backward使用运行时堆栈在遍历列表时跟踪节点,然后在从递归返回的路上打印它们。堆栈算法执行相同的操作,除了它使用Stack对象而不是运行时堆栈。

25.5。使用堆栈评估后缀

在大多数编程语言中,数学表达式与操作符在两个操作数之间编写,如1 + 2所示。此格式称为中缀。一些计算器使用的替代方法称为后缀。在后缀中,操作符遵循操作数,如1 2 +。

有时候postfix有用的原因是有一种自然的方法来评估一个postfix表达式使用堆栈:

从表达式开始,一次获得一个术语(运算符或操作数)。

如果该术语是操作数,请将其推到堆栈上。

如果该术语是一个操作符,从堆栈中弹出两个操作数,对它们执行操作,然后将结果推回堆栈。

当你到达表达式结束时,堆栈上应该只有一个操作数。结果是这个操作数。

25.6。解析

为了实现以前的算法,我们需要能够遍历一个字符串并将其分解成操作数和运算符。此过程是解析的示例,结果(字符串的各个块)称为令牌。你可能会记得这些话

我们在homeworkchina为Python或Python堆栈提供专家帮助家庭作业。我们的导师是为各级学生提供家庭作业帮助的专家。

Posted on March 31, 2017 in 蟒蛇

Share the Story

Back to Top
Share This