程序=数据结构+算法
数据结构就是设计数据以何种方式组织并存储在计算机中。列表、集合与字典等都是一种数据结构。
小Tips:列表中的元素是怎样存储的,操作的时间复杂度是多少?
Python将数存放在一个内存单元中,在列表中的元素指向那个内存单元。所以列表中的元素在内存单元中可能在一起,也可能不在一起。 [].insert()和[].remove()的时间复杂度为o(n) [].append()和[].pop()的时间复杂度为o(1)
栈
栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表。
栈的特点:后进先出
栈的基本操作:
- 进栈(压栈):push
- 出栈:pop
- 取栈顶(看看栈顶是谁):gettop
Python中实现栈:
进栈函数:append 出栈函数:pop 查看栈顶函数:li[-1]
小Tips:
递归出错的原因是:爆栈
示例:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配。
思路:检查字符串是否包含"{","[","("如果包含则将其入栈,遇到"}","]",")"时检查当前栈顶,相同则将其出栈,否则返回False
1 def check_kuohao(str): 2 stack = [] 3 for i in str: 4 if i in {'{','[','('}: 5 stack.append(i) 6 elif i == '}': 7 if len(stack) > 0 and stack[-1] == '{': 8 stack.pop() 9 else: 10 return False 11 elif i == ']': 12 if len(stack) > 0 and stack[-1] == '[': 13 stack.pop() 14 else: 15 return False 16 elif i == ')': 17 if len(stack) > 0 and stack[-1] == '(': 18 stack.pop() 19 else: 20 return False 21 22 if len(stack) == 0: 23 return True 24 else: 25 return False 26 27 print(check_kuohao('([)]'))