数组是顺序存储,所以都是一个相同的空间,比如第一个空间是100,已知需要查找第二个位置的数,所以是a[1],又已知每个空间相差4个字节,所以,只需要查找100+4*1就可以找到。
python的列表与数组有两点不同:
1.数组元素类型相同
2.数组长度固定。
python是存的地址,存放数字的地址,直接找到指向的列表。
栈是后进先出的,可以理解为坐电梯,先进来的人在最里面,后进来的人在电梯口,按照统一的顺序也是后进来的先能出去。
class stack:
def __init__(self):
self.stack = []
def push(self, element): # 压栈
self.stack.append(element)
def pop(self): # 出栈
return self.stack.pop()
def get_top(self): # 获取最尾的信息
if len(self.stack) > 0:
return self.stack[-1]
else:
return None
这种可以写括号哪一题
队列
class queue:
def __init__(self, size=100):
self.queue = [0 for _ in range(size)]
self.size = size
self.rear = 0
self.front = 0
def push(self, element):
self.rear = (self.rear+1) % self.size
self.queue[self.rear] = element
# 弹出
def pop(self):
if not self.is_empty():
self.front = (self.front+1) % self.size
return self.queue[size.front]
else:
raise IndexError("queue is empty")
# 判断队空
def is_empty(self):
return self.rear = self.front
# 判断对满
def is_filled(self):
return (self.rear+1) % self.size == self.front
也就是放入的可以先出
python里面有相对应的模块。
from collections import deque
q = deque([1,2,3,4], 5)
q.append(1) # 队尾进队
q.popleft() # 队首进队
#队满会自动弹出第一个输入的,可以实现linux命令里面的 tail -n “log” 查看尾字段
def tail(n):
with open("test.txt",'r')as f:
q = deque(f)
return q
tail(5) # 会输出最后的5个
走迷宫的方法
# maze 是所用的迷宫
def maze_path(x1,y1,x2,y2):
stack = []
stack.append((x1, y1))
dirs = [
lambda x,y : (x+1,y),
lambda x,y : (x,y-1),
lambda x,y : (x-1,y),
lambda x,y : (x,y+1)
]
while (len(stack)>0):
curNode = stack[-1]
if curNode[0] == x2 and curNode[1] == y2:
for p in stack:
print(p)
return True
for dir in dirs:
nextNode = dir(curNone[0],curNode[1])
# 如果下一个节点能走
if maze[nextNode[0]][nextNode[1]] = 0:
stack.append(nextNode)
maze[nextNode[0][nextNode[1]] = 2
break
else:
maze[nextNode[0]][nextNode[1]] = 2
stack.leftpop()
else:
print("找不到路h")
return False