Python 数据结构 之 队列 的顺序、链式存储结构

本文所采用的数据结构模板为 《数据结构教程》C语言版,李春葆、尹为民等著。

改篇所涉及到的是 队列 的顺序、链式存储结构。

用Python仿照C语言来实现。

文章转载请注明: Python 数据结构 之 队列 的顺序、链式存储结构

代码地址:

https://github.com/WenkeZhou/PythonDataStructure/tree/master/struct/Queue

队列的顺序存储结构:

# !/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'MrHero'


class SqQueue():

    def __init__(self, size):
        self.data = list(None for _ in range(size + 1))
        self.maxsize = size + 1
        self.front = 0
        self.rear = 0
        self.length = 0

    def get_length(self):
        return self.length

    def is_full(self):
        full = (self.rear + 1) % self.maxsize == self.front and True or False
        return full

    def is_empty(self):
        empty = self.rear == self.front and True or False
        return empty

    def enQueue(self, elem):
        #进队列,从队尾插入
        if self.is_full():
            raise IndexError("Queue is full!")
        else:
            self.data[self.rear] = elem
            self.rear = (self.rear + 1) % self.maxsize
            self.length += 1

    def deQueue(self):
        #出队列,从队首删除
        if self.is_empty():
            raise ValueError("SqQueue is empty!")
        else:
            del_elem = self.data[self.front]
            self.data[self.front] = None
            self.front = (self.front + 1) % self.maxsize
            self.length -= 1
            return del_elem

    def show_queue(self):
        #显示队列元素, 从队首开始显示
        if self.is_empty():
            raise ValueError("SqQueue is empty!")
        else:
            j = self.front
            while j != self.rear:
                print self.data[j],
                j = (j + 1) % self.maxsize
            print ''

if __name__ == '__main__':
    sqq = SqQueue(5)
    for i in range(5):
        sqq.enQueue(i)
    sqq.show_queue()
    print ".............."
    sqq.deQueue()
    sqq.show_queue()

队列的链式存储结构:

# !/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'MrHero'


class Node(object):
    # 节点
    def __init__(self, data=None):
        self.data = data
        self.next = None

class LkQueue():

    def __init__(self):
        self.front = Node()
        self.rear = Node()
        self.length = 0

    def get_length(self):
        return self.length

    def is_empty(self):
        empty = self.length == 0 and True or False
        return empty

    def enQueue(self, elem):
        # 入队
        tmp = Node(elem)
        if self.is_empty():
            self.front = tmp
            self.rear = tmp
        else:
            self.rear.next = tmp
            self.rear = tmp
        self.length += 1

    def deQueue(self):
        # 出队
        if self.is_empty():
            raise ValueError("LKQueue is empty!")
        else:
            del_elem = self.front.data
            self.front = self.front.next
            self.length -= 1
            return del_elem

    def showQueue(self):
        # 从对首 出队
        if self.is_empty():
            raise ValueError("LKQueue is empty!")

        j = self.length
        tmp = self.front
        while j > 0:
            print tmp.data,
            tmp = tmp.next
            j -= 1
        print ''


if __name__ == '__main__':
    lkq = LkQueue()
    for i in range(5):
        lkq.enQueue(i)
    lkq.showQueue()
    print ";;;;;;;;;"
    lkq.deQueue()
    lkq.showQueue()


文章转载请注明:  Python 数据结构 之 队列 的顺序、链式存储结构

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值