线性数据结构
一旦一个数据项被添加,它相对于前后元素一直保持该位置的不变
线性数据结构有两端,有时被称为左右,某些情况被称为前后,你也可以称为顶部和底部
接下来我们研究栈、队列、deques、列表
1.0什么是栈
栈(后进先出)是一个项的集合,添加移除新项总发生在同一端,这一端通常称为 顶部,与顶部相对应的端称为底部
栈的底部很重要,因为在栈中靠近底部的项是存储时间最长的。最近添加的项是最先会被移除的。这种排序原则有时被称为 LIFO,后进先出。它基于在集合内的时间长度做排序。较新的项靠近顶部,较旧的项靠近底部。
举个例子:。几乎所有的自助餐厅都有一堆托盘或盘子,你从顶部拿一个,就会有一个新的托盘给下一个客人。想象桌上有一堆书, 只有顶部的那本书封面可见,要看到其他书的封面,只有先移除他们上面的书。
我们新建一个栈包含了很多Python对象
Python 数据对象创建和删除的过程,注意观察他们的顺序。
栈的抽象数据类型由以下结构和操作定义。如上所述,栈被构造为项的有序集合,其中项被添加和从末端移除的位置称为“顶部”。栈是有序的 LIFO 。栈操作如下。
- Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。
- push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。
- pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。
- peek() 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。
- isEmpty() 测试栈是否为空。不需要参数,并返回布尔值。
- size() 返回栈中的 item 数量。不需要参数,并返回一个整数。
我们通过python语言来实现:
我们定义一个stack_definiton.py文件
class Stack: def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def push(self, item): self.items.append(item) def pop(self): self.items.pop() def peek(self): return self.items[len(self.items) - 1] def size(self): return len(self.items) def list1(self): return self.items
再定义一个python_example.py 对上述定义的方法进行测试
from python_basic_stack.stack_definition import Stack # 定义一个对象 s = Stack() # 判断栈是否为空 print("栈是否为空:", s.isEmpty()) # 4入栈 s.push(4) # dog入栈 s.push("dog") # 输出当前栈的成员 print(s.list1()) # 输出栈顶 print(s.peek()) # 8.入栈 s.push(8.4) # 输出当前栈的成员 print(s.list1()) # 栈顶第一个元素出栈 s.pop() # 输出当前栈的成员 print(s.list1()) # 输出栈顶 print(s.peek()) # 栈顶第一个元素出栈 s.pop() # 输出当前栈的成员 print(s.list1()) # 输出栈顶 print(s.peek()) # 栈顶元素出栈 s.pop() # 输出当前栈的成员 print(s.list1()) # 栈是否为空 print(s.isEmpty())