学习数据结构笔记--python的列表实现和数组,栈基础

数组是顺序存储,所以都是一个相同的空间,比如第一个空间是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值