python数据结构与算法——栈、队列与双端队列
栈
栈:是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端进行加入数据和输出数据的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。
- 由于只能在一端操作,因此按照后进先出的原理运作
栈的实现
支持操作:
Stack()创建一个新的空栈
push(item)添加一个新的元素item到栈顶
pop()弹出栈顶元素
peek()返回栈顶元素
is_empty()判断栈是否为空
size()返回栈的元素个数
class Stack(object):
"""栈"""
def __init__(self):
self.__list = []
def push(self, item):
"""加入元素"""
self.__list.append(item)
def pop(self):
"""弹出元素"""
return self __list.pop()
def peek(self):
"""返回栈顶元素"""
if self.__list:
return self.__list[-1]
else:
return None
def is_empty(self):
"""判断是否为空"""
#return self.__list == []
return not self__list
def size(self):
"""返回栈的大小"""
return len(self.__list)
if __name__ == "__main__":
stack = Stack()
stack.push("hello, world")
stack.push("hello, python")
stack.push("hello, China")
print(stack.size())
print(stack.peek())
print(stack.pop())
print(stack.pop())
队列与双端队列
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表
队列是一种先进先出的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作。
队列的实现
class Queue(object):
"""队列"""
def __init__(self):
self.__list = []
def enqueue(self,item):
"""往队列中添加一个item元素"""
self.__list.append(item)
def dequeue(self):
"""从队列头部删除一个元素"""
return slef.pop(0)
def is_empty(self):
"""判断一个队列是否为空"""
return self.__list == []
def size(self):
"""返回队列的大小"""
return len(self.__list)
if __name__ == "__main__":
s = Queue()
s.enqueque(1)
s.enqueque(2)
s.enqueque(3)
s.enqueque(4)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
双端队列
双端队列,是一种具有队列和栈的性质的数据结构
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队
双端队列的实现
操作:
Deque()创建一个空的双端队列
add_front(item)从队头加入一个item元素
add_rear(item)从队尾加入一个item元素
remove_front()从队头删除一个item元素
remove_rear()从队尾删除一个item元素
is_empty()判断双端是否为空
size()返回队列大小
class Deque(object):
"""双端队列"""
def __init__(self):
self.__list = []
def add_front(self, item):
"""往队列头部添加一个item元素"""
self.__list.insert(0, item)
def add_rear(self, item):
"""往队列尾部添加一个item元素"""
self.__list.append(item)
def pop_front(self):
"""从队列头部删除一个元素"""
return self.__list.pop(0)
def pop_rear(self):
"""从队列尾部删除一个元素"""
return self.__list.pop()
def is_empty(self):
"""判断一个队列是否为空"""
return self.__list == []
def size(self):
"""返回队列大小"""
return len(self.__list)
原创文章,转载周知
持续更新...
个人博客地址:www.limiao.tech

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Python全栈 Web(边框、盒模型、背景)
CSS常用的属性: width height color background-color font-size font-weight text-decoration vertical-align 尺寸单位和颜色: px % red rgb(255, 0, 0) reba(255, 0, 0, 0.5) #ff0000 #f00 尺寸 和 边框: 尺寸属性: width、height 用来改变元素的宽高大小 取值:px为单位的数字 或 % 快元素和行内快元素都可以设置宽高大小 行内元素不起作用,大小有内容自适应 溢出处理: 溢出属性:overflow 取值:visible(默认可见) hidden 隐藏 溢出部分不可见 scroll 显示滚动条 溢出时可用 始终显示 auto 自动当发生溢出的时 产生滚动条并可用 边框: 边框的实现: 1.简写设置 通过一个属性为4个方向设置边框 可以设置边框的宽度、样式、颜色 属性:border 取值:width style color(缺一不可) width:宽度 px style:边框样式 取值: solid:实线 dashed:虚线 dott...
-
下一篇
深入理解Java的整型类型:如何实现2+2=5?
先看下这段神奇的Java代码: public static void main(String[] args) throws Exception { doSomethingMagic(); System.out.printf("2 + 2 = %d", 2 + 2); } 执行结果:2 + 2 = 5 那么doSomethingMagic到底做了什么神奇的事情呢?先看代码: private static void doSomethingMagic() throws Exception { Class cache = Integer.class.getDeclaredClasses()[0]; Field c = cache.getDeclaredField("cache"); c.setAccessible(true); Integer[] array = (Integer[]) c.get(cache); array[132] = array[133]; } 所以这个例子其实包含了Java中整型类型Integer的一个知识点。 可能有的朋友对于doSomethingMagic里面的代码...
相关文章
文章评论
共有0条评论来说两句吧...