【数据结构】栈、队列、堆的python实现

【数据结构】栈、队列、堆的python实现

  • 一、栈的python实现
    • 1.1、栈的列表实现方法
    • 1.2、用双向队列模拟栈
  • 二、队列的python实现
    • 2.1、队列的列表实现
    • 2.2、使用deque实现队列
  • 三、堆的python实现

栈、队列、堆是基础的数据结构类型,其中栈是后进先出的数据结构;队列是先进先出的数据结构;堆通常可以被看成一棵树,又可以被分为最小堆和最大堆,最小堆是指堆中某个节点的元素总不大于其父节点的值;最大堆是指堆中某个元素总不小于其父节点的值。

一、栈的python实现

1.1、栈的列表实现方法

列表(list)是python中经常用到的基础数据结构,我们可以使用列表来模拟栈,实现入栈,出栈等效果。

stack = []
#入栈
stack.append(1)
print(stack)
stack.append(2)
print(stack)
stack.append(5)
print(stack)
#查看栈顶元素
top = stack[-1]
print('栈顶元素为:',top)
#出栈
stack.pop()
print(stack)
#判断栈是否为空
if stack:
    print('Not Empty')
else:
    print('Empty')

1.2、用双向队列模拟栈

python的内置模块collections中包含了双向队列deque的数据结构类型,可以在队列的左端和右端实现入队和出队,在双向队列的右端指向入队和出队动作就可以模拟入栈和出栈。

from collections import deque

stack = deque()
#入栈
stack.append(1)
print(stack)
stack.append(2)
print(stack)
#出栈
a = stack.pop()
print(stack)
print(list(stack))

#判断栈是否为空
if list(stack):
    print('栈不为空!')
else:
    print('栈为空!')

二、队列的python实现

2.1、队列的列表实现

可以使用在列表尾部添加元素模拟入队,列表头部删除元素模拟出队。

queue = []
#入队
queue.append(1)
print(queue)
queue.append(2)
print(queue)
queue.append(5)
print(queue)
#出队
queue.pop(0)
print(queue)
#判断队列是否为空
if queue:
    print('Not Empty')
else:
    print('Empty')

2.2、使用deque实现队列

from collections import deque

queue = deque()
#入队
queue.append(1)
print(queue)
queue.append(1)
print(queue)
queue.append(7)
print(queue)
#出队
queue.popleft()
print(queue)
#在某位置插入元素
queue.insert(1,3)
print(queue)
#判断队列是否为空
if queue:
    print('Not Empty')
else:
    print('Empty')

三、堆的python实现

python中内置了实现堆的模块,可以直接调用。

import heapq

#列表h
h = [1,4,5,2,7]

#对h进行最小堆排序
heapq.heapify(h)
print(h)

#删除堆顶元素
a = heapq.heappop(h)
print('堆顶元素为:',a)
print('堆排序为:',h)
#在堆中加入一个元素val,并对堆重新排序
val = 3
heapq.heappush(h,val)
print('堆排序为:',h)

#在堆中加入一个元素,保持堆得元素数量不变,如果加入的元素大于堆顶元素则删除堆顶元素。
val = 4
heapq.heapreplace(h,val)
print('堆排序为:',h)

你可能感兴趣的:(数据结构)