栈和队列

本文深入探讨了数据结构的分类,包括线性结构、树结构和图结构,并详细讲解了一笔画问题的解决条件。同时,文章分析了Python列表的存储机制,线性表的不同实现方式,以及栈和队列的基本概念与应用。此外,还提供了括号匹配问题的Python代码示例,展示了双端队列和队列的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构的分类
线性结构、树结构、图解钩(一对一,一对多,多对多)

一笔画问题
图的节点的度为奇数的节点个数为0个或者2个;其中2个时,起点、终点为一个奇点。


32位机只能寻址4g内存。

python列表的存储
列表可变长:开一个固定长度空间,不够再开一倍,开完复制再append。摊还分析(动态表)下时间复杂度O(1),因为需要开的频率越来越少。
元素类型不一样:存地址,指向对象

线性表分为:顺序表、链表

线性结构:栈
LIFO
栈底,栈顶
对列表来说,支持的栈操作是li.appenrd()和li.pop()


面试题:
进栈顺序ABC,理一下出栈顺序:ABC,ACB,BCA,BAC,CBA
后面的元素先出,那么它前面的元素后出是一定是反着的。
N个元素的合法出栈序列个数是卡特兰数。

应用:括号匹配

# 括号匹配问题
def brace_match(s):
    stack = []
    match = {'}': '{', ']': '[', ')': '('}
    for chr in s:
        if chr in {'[', '{', '('}:
            stack.append(chr)
        elif len(stack) == 0:
            print('数目不匹配')
            return False
        elif match[chr] == stack[-1]:
            stack.pop()
        elif match[chr] != stack[-1]:
            print('{}不匹配{}'.format(chr, stack[-1]))
            return False

    if len(stack) == 0:
        print('匹配成功')
        return True
    else:
        print('数目不匹配')
        return False


s = '{}(){}{[]()}'
brace_match(s)

 

队列
一端(队尾)插入,列一端(对头)删除
FILO
双向队列

队列的实现:
1 append,不用pop,front 指针后移
2 环形队列,取摸操作,满了就得再开了

两个栈做一二个队列:
进队——》1号栈进栈
出队——》2号栈出栈;若为空,1号栈栈出栈进2号栈,再2号出栈(2号空了之后,2号才能进栈操作)

队列内置模块
1 from collections import deque
2 import queue

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值