分别用数组、链表实现队列

'''==========数组实现队列==============='''
class MyQueue():
    #用两个指针分别记录队列首元素的位置、队列尾元素往后一个位置
    def __init__(self):
        self.items = []
        self.front = 0 #队列头
        self.last = 0 #队列尾元素往后一个位置
    #判断队列是否为空
    def empty(self):
        return  self.front ==self.last
    #返回队列的大小
    def size(self):
        return self.last -self.front
    #返回队列的首元素
    def getFront(self):
        if self.empty():
            return None
        else:
            return self.items[self.front]
    #返回队列的尾元素
    def getLast(self):
        if self.empty():
            return None
        else:
            return self.items[self.last-1]
    #删除队列头元素
    def deQueue(self):
        if self.front<self.last:
            self.front+=1
        else:
            print("队列已空")
    #把新元素加入队列
    def enQueue(self,e):
        self.items.append(e)
        self.last+=1
if __name__=="__main__":
    Q = MyQueue()
    Q.enQueue(1)
    Q.enQueue(2)
    Q.enQueue(5)
    print("队列的头元素是:"+str(Q.getFront()))
    print("队列的尾元素是:" + str(Q.getLast()))
    print("队列的大小是:" + str(Q.size()))


'''==========链表实现队列==============='''
class Node(object):
    # 创建一个节点
    def __init__(self, val=None, next=None):
        self.val = val
        self.next = next

class MyQueue():
    # 分配头结点
    def __init__(self):
        self.pHead = None
        self.pEnd = None

    # 判断队列是否为空
    def isEmpty(self):
        if self.pHead == None:
            return True
        else:
            return False

    # 返回队列大小
    def size(self):
        size = 0
        p = self.pHead
        while p:
            size += 1
            p = p.next
        return size

    # 返回队列首元素
    def getpHead(self):
        if self.isEmpty():
            return None
            print("队列已经是空")
        return self.pHead.val

    # 返回队列尾元素
    def getpEnd(self):
        if self.isEmpty():
            return None
            print("队列已经是空")
        return self.pEnd.val

    # 出队列,删除队列头元素
    def deQueue(self):
        if self.isEmpty():
            return None
            print("队列已经是空")
        self.pHead = self.pHead.next
        # 全部删除后头结点指针与魏结点指针重合,均指向None
        if self.pHead == None:
            self.pEnd = None

    # 把新元素加入队列尾
    def addQueue(self, e):
        p = Node()
        p.val = e
        # p.next =None
        if self.pHead == None:
            self.pHead = self.pEnd = p
        else:
            self.pEnd.next = p
            self.pEnd = p


if __name__ == "__main__":
    Q = MyQueue()
    Q.addQueue(1)
    Q.addQueue(2)
    Q.addQueue(5)
    print("队列的头元素是:" + str(Q.getpHead()))
    print("队列的尾元素是:" + str(Q.getpEnd()))
    print("队列的大小是:" + str(Q.size()))






猜你喜欢

转载自blog.csdn.net/liuli1926634636/article/details/89454365