python顺序表的实现_数据结构:队列 链表,顺序表和循环顺序表实现(python版)...

链表实现队列:

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

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

顺序表实现队列:

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

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

循环顺序表实现队列:

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

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

#!/usr/bin/env python

# -*- coding:utf-8 -*-

class QueueUnderflow(ValueError):

pass

#链表节点

class Node(object):

def __init__(self, elem, next_ = None):

self.elem = elem

self.next = next_

#链表实现队列,头部删除和查看O(1),尾部加入O(1)

class LQueue(object):

def __init__(self):

self._head = None

self._rear = None

def is_empty(self):

return self._head is None

#查看队列中最早进入的元素,不删除

def peek(self):

if self.is_empty():

raise QueueUnderflow

return self._head.elem

#将元素elem加入队列,入队

def enqueue(self, elem):

p = Node(elem)

if self.is_empty():

self._head = p

self._rear = p

else:

self._rear.next = p

self._rear =p

#删除队列中最早进入的元素并将其返回,出队

def dequeue(self):

if self.is_empty():

raise QueueUnderflow

result = self._head.elem

self._head = self._head.next

return result

#顺序表实现队列,头部删除和查看O(1),尾部加入O(n)

class Simple_SQueue(object):

def __init__(self, init_len = 8):

self._len = init_len

self._elems = [None] * init_len

self._num = 0

def is_empty(self):

return self._num == 0

def is_full(self):

return self._num == self._len

def peek(self):

if self._num == 0:

raise QueueUnderflow

return self._elems[self._num-1]

def dequeue(self):

if self._num == 0:

raise QueueUnderflow

result = self._elems[self._num-1]

self._num -= 1

return result

def enqueue(self,elem):

if self.is_full():

self.__extand()

for i in range(self._num,0,-1):

self._elems[i] = self._elems[i-1]

self._elems[0] = elem

self._num += 1

def __extand(self):

old_len = self._len

self._len *= 2

new_elems = [None] * self._len

for i in range(old_len):

new_elems[i] = self._elems[i]

self._elems = new_elems

#循环顺序表实现队列,头部删除和查看O(1),尾部加入O(1)

class SQueue(object):

def __init__(self, init_num = 8):

self._len = init_num

self._elems = [None] * init_num

self._head = 0

self._num = 0

def is_empty(self):

return self._num == 0

def peek(self):

if self.is_empty():

raise QueueUnderflow

return self._elems[self._head]

def dequeue(self):

if self.is_empty():

raise QueueUnderflow

result = self._elems[self._head]

self._head = (self._head + 1) % self._len

self._num -= 1

return result

def enqueue(self, elem):

if self._num == self._len:

self.__extand()

self._elems[(self._head + self._num) % self._len] = elem

self._num += 1

def __extand(self):

old_len = self._len

self._len *= 2

new_elems = [None] * self._len

for i in range(old_len):

new_elems[i] = self._elems[(self._head + i) % old_len]

self._elems, self._head = new_elems, 0

if __name__=="__main__":

q = SQueue()

for i in range(8):

q.enqueue(i)

#for i in range(8):

# print(q.dequeue())

#print(q._num)

q.enqueue(8)

print(q._len)

3、顺序表、内存、类型、python中的list

1.内存.类型本质.连续存储 1.内存本质 2.C 语言实例-计算 int, float, double 和 char 字节大小 使用 sizeof 操作符计算int, float, double 和 ...

PHP数据结构之二 线性表中的顺序表的PHP实现

线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...

顺序表的基本方法实现C语言版

顺序表--------------线性表的第一个儿子 这个儿子的结构体定义: typedef int ElemType;//取别名 typedef struct link{ ElemType * he ...

[Python] 数据结构--实现顺序表、链表、栈和队列

说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

数据结构Java实现02----线性表与顺序表

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

数据结构Java实现01----线性表与顺序表

一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...

【数据结构 Python & C++】顺序表

用C++ 和 Python实现顺序表的简单操作 C++代码 // Date:2019.7.31 // Author:Yushow Jue #include using ...

Java数据结构——顺序表

一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...

数据结构——Java实现顺序表

一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...

随机推荐

x64内联汇编注意点

#include #include extern "C" int MyPrintf(ULONGLONG,ULON ...

使用Redis分布式队列

1.这是处理异常的类 public class MyExceptionAttribute:HandleErrorAttribute { //public static Queue

Web - 客户端存储的几种方式

客户端存储主要方便一些APP离线使用.今天就来说说客户端存储的方法有多少? 说在最前面的一句:所有的客户端存储都有一个原则:读写的数据必须要同域 1 Cookie Cookie是一项很老的技术的,就是 ...

通俗易懂------this指向

因为JavaScript 中this 是在运行期进行绑定的,因此JavaScript 中this 关键字具备多重含义. 具体在实际应用中,this的指向大致可以分为下面4种. 作为对象的方法调用   ...

2016.09.14,英语,《Using English at Work》全书笔记

半个月时间,听完了ESLPod出品的,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...

Unity3D 批量图片资源导入设置

原地址:http://blog.csdn.net/asd237241291/article/details/8433548 创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:[] 本 ...

keil Ax51中条件编译指令IF与$IF的区别

keil A51中条件编译指令IF与$IF的区别:1.IF和$IF是不等价的,不要混淆了;2.带前缀$的条件编译$IF用法:(汇编器指示命令Assembler Directive)只能用来测试由$SE ...

在C#中子线程如何操作主窗口线程上的控件

在C#中子线程怎样操作主线程中窗口上控件 在C#中,直接在子线程中对窗口上的控件操作是会出现异常,这是因为子线程和运行窗口的线程是不同的空间,因此想要在子线程来操作窗口上的控件.是不可能简单的通过控件 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值