成为专业认证的数据结构是数据值的集合,它们之间的关系,以及可以应用于数据的函数或操作。现在有很多可用的数据结构。但今天我们的重点将放在堆栈数据结构上。我将讨论以下主题:为什么是数据结构?数据结构类型什

成为专业认证的

数据结构是数据值的集合,它们之间的关系,以及可以应用于数据的函数或操作。现在有很多可用的数据结构。但今天我们的重点将放在堆栈数据结构上。我将讨论以下主题:

为什么是数据结构?数据结构类型什么是堆栈数据结构?创建堆栈数据结构将元素从堆栈数据结构

的堆栈应用程序推送到堆栈Pop元素为什么是数据结构要回答这个问题,你必须从一个大的层面来思考。想想谷歌地图如何在短短几秒钟内为你显示最佳路线,它如何在微秒内返回你的搜索结果。它不涉及100个网站,它处理了超过十亿个站点,并且仍然显示了如此快速的结果。“KDSPE”“KDSPs”很好,虽然所使用的算法起着至关重要的作用,但是数据结构或所使用的容器是该算法的基础。在任何应用程序中,以最适合其使用的方式或结构组织和存储数据是有效访问和处理数据的关键。

类型的数据结构

有一些标准数据结构可用于有效处理数据。我们甚至可以自定义它们或构建完全新的来适应我们的应用程序。


什么是堆栈数据结构

考虑一些现实生活中的例子:

在铁路车场火车分流抽屉的托盘上的货物板上装运


所有这些例子都遵循后进先出的策略。以托盘上的盘子为例,当你想拣盘子时,你被迫从顶部拣盘子,而当盘子放在托盘上时,它们必须按相反的顺序排列。上述遵循后进先出(LIFO)原则的例子被称为堆栈。

除了互补操作外,我可以说,在堆栈上可能执行的主要操作是:

向堆栈Pop的顶部推送或插入元素,或从堆栈顶部移除元素

创建堆栈数据结构类堆栈:定义初始化(自身,最大大小):self.\u元素=[无]*self.\u最大大小def get_max_size(自身):#无论堆栈是否已满都返回bool值,如果已满则返回True,否则返回False返回self.get_max_size()-1==self#推动堆栈顶部的元素def push(self,数据):如果(我已经饱了()):其他:自我元素[自已.\uu top]=数据#在调试时,可以使用下面的str来打印DS对象的元素定义结构(自身):msg=[]而(索引>=0):msg.append((str)(self.\u elements[索引])指数-=1msg=“堆栈数据(从上到下):” msg现在返回消息

,当您执行以下操作时:

stack1=Stack(4)
#推送所有必需的元素。
stack1.Push(“A”)
stack1.Push(“B”)
stack1.Push(“C”)
stack1.Push(“E”)
print(stack1.isúfull())
print(stack1)

输出:

堆栈已经是完整的真实堆栈数据(从上到下):D C B A

现在从堆栈

弹出元素,因为您已经将元素插入堆栈,所以您需要弹出它们,所以您需要注意以下事项:

堆栈不是空的,即Top!=-1删除数据时,顶部必须指向堆栈的上一个顶部。“

“那么,算法是什么??”

“#无论堆栈是否为空都返回bool值,如果为空则返回True,否则返回Falsedef为空(self):返回自身。顶部==-1 #返回弹出值def pop(自身):如果(self.is_empty()):其他:一个=自我元素[自已.\uu top]self.\uu top=self.\uu top-1;#从上到下显示所有堆栈元素def显示(自):打印(self.\uu元素[i],结束=')print()

现在,考虑到以前创建的堆栈,尝试弹出元素

print(stack1.pop())
print(stack1.pop())
print(stack1)
print(stack1.pop())
print(stack1.pop())

输出:

D

C

堆栈数据(从上到下):B A

B

A

无需弹出,已经是空的

应用程序堆栈数据结构示例1:

堆栈用于实现用于算术表达式求值的括号匹配算法,也用于实现方法调用。


答案是5。

示例2:

剪贴板在Windows中,使用两个堆栈来实现撤消重做(ctrl z,ctrl y)操作。您可能已经使用过Windows word编辑器,如MS word、记事本等。以下是用MS word编写的文本。观察一下点击Ctrl-Z和Ctrl-Y时文本的变化。


这是一个模拟撤消重做操作的代码。浏览代码并观察堆栈在这个实现中是如何使用的。

创建类堆栈类堆栈:self.\uu max_size=最大尺寸自已.\uu top=-1个定义已满(自身):返回真值返回Falsedef为空(self):如果(self.\uu top=-1):返回Falsedef push(self,数据):print(“堆栈已满!!”)其他:自我.\uu top =1self.\u elements[self.\u top]=数据def pop(自身):print(“堆栈为空!!”)其他:数据=自我元素[自已.\uu top]返回数据def显示(自):如果(self.is_empty()):其他:而(索引>=0):打印(自我元素[索引])指数-=1def get_max_size(自身): #在调试时,可以使用下面的str来打印DS对象的元素msg=[]而(索引>=0):指数-=1msg=“堆栈数据(从上到下):” msg返回消息#用于实现移除或退格操作的函数全局剪贴板,撤消堆栈剪贴板。删除(数据)打印(“删除:”,剪贴板)#执行撤消操作的函数def undo():如果(undo_stack.is_empty()):其他:data=撤消堆栈.pop()重做堆栈。推送(数据)#实现重做操作的函数def重做():如果(redo_stack.is_empty()):其他:data=redo_stack.pop()print(“没有要重做的数据”)其他:剪贴板。删除(数据)撤消堆栈。推送(数据)打印(“重做:”,剪贴板)剪贴板=[“A”,“B”,“C”,“D”,“E”,“F”]撤消堆栈=堆栈(长度(剪贴板))redo_stack=堆栈(长度(剪贴板))撤消()redo()

输出:

删除:['A'、'B'、'C'、'D'、'E']

撤消:['A'、'B'、'C'、'D'、'E'、'F']

重做:['A'、'B'、'C'、'D'、'E']

这样,我们在Python文章中就结束了这个堆栈数据结构。如果你成功地理解并运行了代码,你就不再是一个新的堆栈数据结构。