数据结构与算法栈与递归
Posted yangjiez
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法栈与递归相关的知识,希望对你有一定的参考价值。
1 栈的理解
栈是一个数据集合,可以理解为只能在一端进行插入或者删除操作的列表。
栈的特点:后进先出
栈的基本操作
- 进栈:push
- 出栈:pop
- 取栈顶:gettop
def brace_match(s): stack = [] d = {"(":")", "[":"]", "{":"}"} for ch in s: if ch in {'(','[','{'}: stack.append(ch) elif len(stack) == 0: print('多了右括号%s' % ch) return False elif d[stack[-1]] == ch: stack.pop() else: print('括号%s处不匹配' % ch) return False if len(stack) == 0: return True else: print('剩余括号未匹配') return False
2 队列的理解
队列的理解:
- 队列(queue)是一个数据集合,仅允许在列表一端进行插入,另一端进行删除。
- 进行插入的一端称为队尾(rear),插入动作被称为进队或者入队。
- 进行删除的一端称为队头(front),删除动作称为出队。
- 队列的性质:先进先出(first-in,first-out)
- 双向队列:队列两端都允许进行进队和出队操作
队列的内置模块:from collections import deque
- 创建队列:queue = deque(li)
- 进队:append
- 出队: popleft
- 双向队列首进队: appendleft
- 双向队列尾进队:pop
3 递归实现斐波那契函数
# 递归:
def my_num(x):
if x == 1:
return 1
elif x == 2:
return 2
else:
return my_num(x-2) + my_num(x-1)
for i in range(1, 10):
print(my_num(i))
4 车辆调度问题
def VehicleReecorder(Trucks, k):
BufferRails = []
for i in range(k):
BufferRails.append([])
currentCarriage = 1
for i in Trucks:
if i == currentCarriage:
print(f'{i}')
currentCarriage += 1
continue
else:
for buffer in BufferRails:
if not buffer:
buffer.append(i)
break
else:
if min(buffer) > i:
buffer.append(i)
break
for buffer_list in BufferRails:
for i in range(len(buffer_list)):
last = buffer_list.pop()
if last == currentCarriage:
print(f'{i}')
currentCarriage +=1
以上是关于数据结构与算法栈与递归的主要内容,如果未能解决你的问题,请参考以下文章