博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构:队列 链表,顺序表和循环顺序表实现(python版)
阅读量:4594 次
发布时间:2019-06-09

本文共 3868 字,大约阅读时间需要 12 分钟。

链表实现队列:

  尾部 添加数据,效率为0(1)  

  头部 元素的删除和查看,效率也为0(1)

 

顺序表实现队列:

  头部 添加数据,效率为0(n)  

  尾部 元素的删除和查看,效率也为0(1)

 

循环顺序表实现队列:

  尾部 添加数据,效率为0(1)  

  头部 元素的删除和查看,效率也为0(1)

 

1 #!/usr/bin/env python  2 # -*- coding:utf-8 -*-  3   4 class QueueUnderflow(ValueError):  5     pass  6   7 #链表节点  8 class Node(object):  9     def __init__(self, elem, next_ = None): 10         self.elem = elem 11         self.next = next_ 12  13 #链表实现队列,头部删除和查看O(1),尾部加入O(1) 14 class LQueue(object): 15     def __init__(self): 16         self._head = None 17         self._rear = None 18  19     def is_empty(self): 20         return self._head is None 21  22     #查看队列中最早进入的元素,不删除 23     def peek(self): 24         if self.is_empty(): 25             raise QueueUnderflow 26         return self._head.elem 27  28     #将元素elem加入队列,入队 29     def enqueue(self, elem): 30         p = Node(elem) 31         if self.is_empty(): 32             self._head = p 33             self._rear = p 34         else: 35             self._rear.next = p 36             self._rear =p 37  38     #删除队列中最早进入的元素并将其返回,出队 39     def dequeue(self): 40         if self.is_empty(): 41             raise QueueUnderflow 42         result = self._head.elem 43         self._head = self._head.next 44         return result 45  46 #顺序表实现队列,头部删除和查看O(1),尾部加入O(n) 47 class Simple_SQueue(object): 48     def __init__(self, init_len = 8): 49         self._len = init_len 50         self._elems = [None] * init_len 51         self._num = 0 52  53     def is_empty(self): 54         return self._num == 0 55  56     def is_full(self): 57         return self._num == self._len 58  59     def peek(self): 60         if self._num == 0: 61             raise QueueUnderflow 62         return self._elems[self._num-1] 63  64     def dequeue(self): 65         if self._num == 0: 66             raise QueueUnderflow 67         result = self._elems[self._num-1] 68         self._num -= 1 69         return result 70  71     def enqueue(self,elem): 72         if self.is_full(): 73             self.__extand() 74         for i in range(self._num,0,-1): 75             self._elems[i] = self._elems[i-1] 76         self._elems[0] = elem 77         self._num += 1 78  79     def __extand(self): 80         old_len = self._len 81         self._len *= 2 82         new_elems = [None] * self._len 83         for i in range(old_len): 84             new_elems[i] = self._elems[i] 85         self._elems = new_elems 86  87  88 #循环顺序表实现队列,头部删除和查看O(1),尾部加入O(1) 89 class SQueue(object): 90     def __init__(self, init_num = 8): 91         self._len = init_num 92         self._elems = [None] * init_num 93         self._head = 0 94         self._num  = 0 95  96     def is_empty(self): 97         return self._num == 0 98  99     def peek(self):100         if self.is_empty():101             raise QueueUnderflow102         return self._elems[self._head]103 104     def dequeue(self):105         if self.is_empty():106             raise QueueUnderflow107         result = self._elems[self._head]108         self._head = (self._head + 1) % self._len109         self._num -= 1110         return result111 112     def enqueue(self, elem):113         if self._num == self._len:114             self.__extand()115         self._elems[(self._head + self._num) % self._len] = elem116         self._num += 1117 118     def __extand(self):119         old_len = self._len120         self._len *= 2121         new_elems = [None] * self._len122         for i in range(old_len):123             new_elems[i] = self._elems[(self._head + i) % old_len]124         self._elems, self._head = new_elems, 0125 126 127 128 if __name__=="__main__":129     q = SQueue()130     for i in range(8):131         q.enqueue(i)132     #for i in range(8):133     #    print(q.dequeue())134     #print(q._num)135     q.enqueue(8)136     print(q._len)

 

转载于:https://www.cnblogs.com/xautxuqiang/p/6118880.html

你可能感兴趣的文章
虚拟私有云(Virtual Private Cloud,专有网络)配置方式总结
查看>>
bayer格式
查看>>
7.19考后总结
查看>>
2019-03-15 使用Request POST获取CNABS网站上JSON格式的表格数据,并解析出来用xlwt写到Excel中...
查看>>
用Latex写学术论文: IEEE Latex模板和文档设置(\documentclass)
查看>>
HSmartWindowControl 之 显示图像
查看>>
PostCSS一种更优雅、更简单的书写CSS方式
查看>>
LaTeX实验报告模板
查看>>
实例讲解Linux系统中硬链接与软链接的创建
查看>>
JDK安装、变量、变量的分类
查看>>
[POI2000] 最长公共子串
查看>>
【山东省选2008】郁闷的小J 平衡树Treap
查看>>
【linux报错】安装好虚拟机后,挂载光盘报错:mount:you must specify the filesystem type...
查看>>
由浅入深:自己动手开发模板引擎——解释型模板引擎(三)
查看>>
.NET Core TDD 前传: 编写易于测试的代码 一 -- 缝
查看>>
POJ——T3417 Network
查看>>
T1077 多源最短路 codevs
查看>>
Chrome扩展程序的二次开发:把它改得更适合自己使用
查看>>
Django模板语言相关内容
查看>>
Tetrahedron(Codeforces Round #113 (Div. 2) + 打表找规律 + dp计数)
查看>>