数据结构-队列

     队列是一种比较重要的数据结构,其特点是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取模操作,进行循环。

posted on 2013-10-06 19:29  无为在歧路  阅读(224)  评论(0编辑  收藏  举报

导航