数据结构 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值