参考博客:浅谈算法和数据结构: 一 栈和队列 Python数据结构——栈、队列的实现(一) Python数据结构——栈、队列的实现(二) Python数据结构——链表的实现
数据结构
定义:简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。
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 kuohaopipei(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 print(kuohaopipei("{()()[(([]{}))]}"))
队列
队列(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