数据结构 Python实现

参考博客:浅谈算法和数据结构: 一 栈和队列   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

 

 

posted @ 2017-09-09 20:51  细雨蓝枫  阅读(284)  评论(0编辑  收藏  举报