码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构

时间:2018-02-01 22:08:25      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:blog   rom   sel   队列的实现   匹配   技术分享   matching   程序员   运算   

数据结构

  定义:简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。

  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中的位运算符:

技术分享图片

位运算符要比乘除法更快,深得广大程序员的喜爱

 

数据结构

标签:blog   rom   sel   队列的实现   匹配   技术分享   matching   程序员   运算   

原文地址:https://www.cnblogs.com/52-qq/p/8401260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!