数据结构
数据结构可分为三种结构:线性结构(一对一)、树结构(一对多)、图结构(多对多)
数组与列表
相信大家应该知道Python中有列表这种数据结构,而其它语言中基本上都有数组这种数据结构。列表与数组有什么区别呢?主要区别是:列表中的数据类型可不同,其长度是可改变的;而数组要求每个元素的数据类型相同,其长度是固定的。为什么会造成这样的不同?这是由于它们的存储方式不同。在数组中,每个元素存放的是真实的值,而且必须要声明其长度,以方便开辟空间;而列表,每个元素存放的是内存地址,此地址指向的是具体的值,此值可不同的数据类型。而且如果列表占用的空间超过范围,Python会复制此列表到另外一个更大的空间,所以其长度可变的。
栈与队列
栈
什么是栈?栈是一种数据集合,只能在一端进行插入或删除操作,它就像以上的那一堆书,后进先出。基本操作有进栈(li.append)、出栈(li.pop)、取栈顶(li[-1]),可在列表中实现。
可用于栈实现判断括号是否匹配
def brace_match(s): stack = [] match = {')': '(', ']': '[', '}': '{'} match2 = {'(': ')', '[': ']', '{': '}'} for ch in s: # 如果是左括号添加到栈里 if ch in ['(', '[', '{']: stack.append(ch) # 如果栈为空,则表明缺少左括号 elif len(stack) == 0: print('缺少%s' % match[ch]) return False # 如果括号匹配,则清空此括号 elif stack[-1] == match[ch]: stack.pop() # 括号不匹配 else: print('括号不匹配') return False # 栈不为空,表明缺少右括号 if len(stack) > 0: print('缺少%s' % match2[stack[-1]]) return False print('括号匹配成功') return True
队列
队列也是一个数据集合,公允许在列表的一端进行插入,另一端进行删除。进行插入的一端称为队尾,插入动作称为进队或入队;进行删除的一端称为队头,删除动作称为出队。其性质:先进先出。
双向队列:队列的两端都允许进行进阶和出队操作。