zoukankan      html  css  js  c++  java
  • 数据结构-队列

         队列是一种比较重要的数据结构,其特点是FIFO先进先出,操作系统中的任务调度就是利用了队列,不过那是一种通过构建最大堆实现的优先队列。这里我们只讨论比较常见的一种队列,循环队列。循环队列就像一个转盘一样,head和end分别指向队头和队尾,先加入的元素放到队尾,出队在对头。

    首先还是需要定义一个队列的接口,当然我们这样做事为了以后其他实现方式的队列的需求

    class IQueue:
        __metaclass__=ABCMeta
        @abstractmethod
        def Append(self,element):pass
        @abstractmethod
        def Delete(self):pass
        @abstractmethod
        def Front(self):pass
        @abstractproperty
        def IsEmpty(self):pass
        @abstractproperty
        def Length(self):pass
        @abstractmethod
        def Display(self):pass

    队列具有基本的入队,出队,查看对头等

    class CycleQueue(IQueue):
        __defalutSize=10#queue‘s default size 
        __size=0
        __rear,__front,__count=0,0,0
        __data=[]
        def __init__(self,size=None):
            if size<>None:
                self.__size=size
            else:
                self.__size=self.__defalutSize            
            for i in range(size):
                self.__data.append(None)
        def Append(self,element):
            if(self.__count>0 and self.__front==self.__rear):
                raise Exception('队列已满')
            self.__data[self.__rear]=element
            self.__rear=(self.__rear+1)%self.__size
            self.__count+=1
        def Delete(self):
            if(self.__count==0):
                raise Exception('队列已空')
            temp=self.__data[self.__front]
            self.__front=(self.__front+1)%self.__size
            self.__count-=1
            return temp
        def Front(self):
            if(self.__count==0):
                raise Exception('队列已空')
            return self.__data[self.__front]
        def IsEmpty(self):
            if(self.__count==0):
                return True
            return False
        def Length(self):
            return self.__count
        def Display(self):
            str1=[]
            if(self.__count>0):
                str1.append(self.__data[self.__front])
                i=(self.__front+1)%self.__size
                while(i<>self.__rear):
                    str1.append(self.__data[i])
                    i=(i+1)%self.__size
            return str1

    对于队列,其要注意队列的队头和队尾指针的关系,每次入队和出队都需要对队头和队尾指针和 队列大小size取模操作,进行循环。

  • 相关阅读:
    Repository Pattern with Entity Framework 4.1 and Code First
    Entity Framework 4.1/4.3 之四(DBContext 之 1 DBContext 是谁)
    C# 依赖注入
    explicit关键字
    enum关键字
    #pragma once
    #if 0 #end if
    assert
    存储类型
    const关键字
  • 原文地址:https://www.cnblogs.com/keily/p/3354497.html
Copyright © 2011-2022 走看看