06栈和队列

简介: 06栈和队列

栈定义

栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素,访问元素,删除元素,它的特点在于只允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置的概念,保证任何时候可以访问删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。

由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO,Last in First Out)的原理运作

栈结构实现

  1. Stack()创建一个空栈
  2. push()添加一个新的元素item到栈顶
  3. pop()弹出栈顶元素
  4. peek()返回栈顶元素
  5. is_empty()判断栈是否为空
  6. size()返回栈的元素个数

代码实现

1. #!/usr/bin/env python
2. # -*- coding: UTF-8 -*-
3. """
4. @Project :python算法 
5. @File    :11栈.py
6. @IDE     :PyCharm 
7. @Author  :咋
8. @Date    :2023/1/3 17:00 
9. """
10. class Stack(object):
11. def __init__(self):
12.         self.items = []
13. 
14. def is_empty(self):
15. return self.items == []
16. 
17. def push(self,item):
18. # 进栈
19.         self.items.append(item)
20. 
21. def pop(self):
22. # 弹出栈顶元素
23. return self.items.pop()
24. 
25. def peek(self):
26. # 返回栈顶元素
27. return self.items[len(self.items)-1]
28. 
29. def size(self):
30. return len(self.items)
31. 
32. if __name__ == "__main__":
33.     stack = Stack()
34.     stack.push("hello")
35.     stack.push("world")
36.     stack.push("bjsxt")
37. print(stack.size())
38. print(stack.peek())
39. print(stack.pop())
40. print(stack.pop())
41. print(stack.pop())

队列定义

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

队列是一种先进先出的(First In First Out)的线性表,简称FIFO允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间的部位进行操作!假设队列是q=(a1,a2,...,an),那么a1就是对头元素,而an是队尾元素。这样我们就可以在删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍的最后

队列的操作

  1. Queue()创建一个空的队列
  2. enqueue(item)往队列中添加一个item元素
  3. dequeue()从队列的头部删除一个元素
  4. is_empty()判断一个队列是否为空
  5. size()返回队列的大小

代码实现

1. #!/usr/bin/env python
2. # -*- coding: UTF-8 -*-
3. """
4. @Project :python算法 
5. @File    :12队列.py
6. @IDE     :PyCharm 
7. @Author  :咋
8. @Date    :2023/1/3 17:55 
9. """
10. class Queue(object):
11. def __init__(self):
12.         self.items = []
13. 
14. def is_empty(self):
15. return self.items == []
16. 
17. def enqueue(self,item):
18. # 进入队列
19.         self.items.insert(0,item)
20. 
21. def dequeue(self):
22. return self.items.pop()
23. 
24. def size(self):
25. return len(self.items)
26. 
27. if __name__ == "__main__":
28.     q = Queue()
29.     q.enqueue("hello")
30.     q.enqueue("world")
31.     q.enqueue("bjsxt")
32. print(q.size())
33. print(q.dequeue())
34. print (q.dequeue())
35. print(q.dequeue())


相关文章
|
4天前
栈的几个经典应用,真的绝了
文章总结了栈的几个经典应用场景,包括使用两个栈来实现队列的功能以及利用栈进行对称匹配,并通过LeetCode上的题目示例展示了栈在实际问题中的应用。
栈的几个经典应用,真的绝了
|
1天前
|
负载均衡 网络协议 安全
DKDP用户态协议栈-kni
DKDP用户态协议栈-kni
|
1天前
|
负载均衡 网络协议 安全
DPDK用户态协议栈-KNI
DPDK用户态协议栈-KNI
|
1天前
|
测试技术
【初阶数据结构篇】栈的实现(附源码)
在每一个方法的第一排都使用assert宏来判断ps是否为空(避免使用时传入空指针,后续解引用都会报错)。
|
5天前
|
存储 网络协议 Linux
用户态协议栈06-TCP三次握手
用户态协议栈06-TCP三次握手
|
1天前
|
测试技术
【初阶数据结构篇】队列的实现(赋源码)
首先队列和栈一样,不能进行遍历和随机访问,必须将队头出数据才能访问下一个,这样遍历求个数是不规范的。
|
4天前
|
算法
【数据结构与算法】优先级队列
【数据结构与算法】优先级队列
6 0
|
4天前
|
存储 算法
【数据结构与算法】队列(顺序存储)
【数据结构与算法】队列(顺序存储)
5 0
|
5天前
|
存储
全局变量和局部变量在堆和栈的区别
全局变量和局部变量在堆和栈的区别
16 0
|
5天前
|
存储 人工智能 运维
高质量存储力发展问题之浪潮信息发布的大模型智算软件栈的定义如何解决
高质量存储力发展问题之浪潮信息发布的大模型智算软件栈的定义如何解决
10 0