数据结构 定义:简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。 PS:“程序=数据结构+算法” 列表:在其他编程语言中称为“数组”,是一种基本的数据结构类型。 关于:列表的存储问题! 栈: 栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表。 栈的特点:后进先出(last-in, first-out) 栈的概念: 栈顶 栈底 栈的基本操作: 进栈(压栈):push 出栈:pop 取栈顶:gettop
#利用python简单的实现栈操作
class Stack(object): def __init__(self): self.stack=[] def isEmpty(self): return self.stack==[] def push(self,item): self.stack.append(item) def pop(self): if self.isEmpty(): raise IndexError,‘pop from empty stack‘ return self.stack.pop() def peek(self): return self.stack[-1] def size(self): return len(self.stack)
栈的应用——括号匹配问题
括号匹配问题:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配。
例如:
()()[]{} 匹配
([{()}]) 匹配
[]( 不匹配
[(]) 不匹配
def Matching(exp="{[()]}"): stack = [] for i in exp: if i in {‘(‘,‘[‘,‘{‘}: stack.append(i) if i == ‘)‘: if len(stack)>0 and stack[-1] == ‘(‘: stack.pop() else: return False if i == ‘]‘: if len(stack)>0 and stack[-1] == ‘[‘: stack.pop() else: return False if i == ‘}‘: if len(stack)>0 and stack[-1] == ‘{‘: stack.pop() else: return False if len(stack)==0: return True else: return False
队列 队列(Queue)是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。 进行插入的一端称为队尾(rear),插入动作称为进队或入队 进行删除的一端称为队头(front),删除动作称为出队 队列的性质:先进先出(First-in, First-out) 双向队列:队列的两端都允许进行进队和出队操作。
队列实现: 使用方法:from collections import deque 创建队列:queue = deque(li) 进队:append 出队:popleft 双向队列队首进队:appendleft 双向队列队尾进队:pop 队列的实现原理 普通队列: 初步设想:列表+两个下标指针 创建一个列表和两个变量,front变量指向队首,rear变量指向队尾。初始时,front和rear都为0。 进队操作:元素写到li[rear]的位置,rear自增1。 出队操作:返回li[front]的元素,front自减1。
环形队列: 改进方案:将列表首尾逻辑上连接起来。 环形队列:当队尾指针front == Maxsize + 1时,再前进一个位置就自动到0。 实现方式:求余数运算 队首指针前进1:front = (front + 1) % MaxSize 队尾指针前进1:rear = (rear + 1) % MaxSize 队空条件:rear == front 队满条件:(rear + 1) % MaxSize == front
python中的位运算符:
位运算符要比乘除法更快,深得广大程序员的喜爱