python数据结构之动态数组
数组列表:动态数组(Array List)
简介:
最基础简单的数据结构、最大的优点就是支持随机访问(O(1)),但是增加和删除操作效率就低一些(平均时间复杂度O(n))
动态数组也称数组列表,在python中一般为List
由于Python包装好了很多算法上的现成的数组操作函数,通过学习对其内部进行进一步的了解;
下面我对内置函数进行整理学习写下学习笔记:
- 动态数组(数组列表)的概念
- 数组操作函数
- 数组内置函数方法的时间复杂度
- 把内置函数的内部实现方法用python去实现
1.数组列表的概念:
- 顺序存储数据
- 连续存储
- 任意顺序访问,可变大小的列表数据结构允许增加、删除元素
2.数组操作函数:

3.数组内置操作函数的时间复杂度:


4.用python实现内置函数的方法:
#函数上会标明该方法的时间复杂度
#动态数组的类 class DynamicArray: def __init__ (self):
'Create an empty array.'
self._n = 0 #size
self._capacity = 10 #先给个10
self._A = self._make_array(self._capacity) def __len__ (self):
return self._n def is_empty(self):
return self._n == 0 # O(1)
def __getitem__ (self, k):
if not 0 <= k < self._n:
raise ValueError('invalid index')
return self._A[k] # O(1)
def append(self, obj):
if self._n == self._capacity: #首先要判断该容器是否放得下
self._resize(2 * self._capacity)
self._A[self._n] = obj
self._n += 1 def _make_array(self, c):
return (c * ctypes.py_object)( ) def _resize(self, c):
B = self._make_array(c)
for k in range(self._n):
B[k] = self._A[k]
self._A = B
self._capacity = c # O(n)
def insert(self, k, value):
if self._n == self._capacity:
self._resize(2 * self._capacity)
for j in range(self._n, k, -1): #从后往前一个一个往后移
self._A[j] = self._A[j-1]
self._A[k] = value
self._n += 1 # O(n)
def remove(self, value):
for k in range(self._n):
if self._A[k] == value: #一个个查value
for j in range(k, self._n - 1):
self._A[j] = self._A[j+1] ##再一个个移上来
self._A[self._n - 1] = None
self._n -= 1
return
raise ValueError( 'value not found' ) def _print(self):
for i in range(self._n):
print(self._A[i], end = ' ')
print() mylist = DynamicArray()
print ('size was: ', str(len(mylist)))
mylist.append(10)
mylist.append(20)
mylist.append(30)
mylist.insert(0, 0)
mylist.insert(1, 5)
mylist.insert(3, 15)
mylist._print()
mylist.remove(20)
mylist._print()
print ('size is: ', str(len(mylist))) #输出结果
size was: 0
0 5 10 15 20 30
0 5 10 15 30
size is: 5
python数据结构之动态数组的更多相关文章
- (2)redis的基本数据结构是动态数组
redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; ]; }; 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针, ...
- JAVA数据结构--ArrayList动态数组
在计算机科学中,动态数组,可扩展数组,可调整数组,动态表,可变数组或数组列表是一种随机存取可变大小列表数据结构,允许添加或删除元素.它提供许多现代主流编程语言的标准库.动态数组克服了静态数组的限制,静 ...
- nginx学习七 高级数据结构之动态数组ngx_array_t
1 ngx_array_t结构 ngx_array_t是nginx内部使用的数组结构.nginx的数组结构在存储上与大家认知的C语言内置的数组有相似性.比方实际上存储数据的区域也是一大块连续的内存. ...
- 用最复杂的方式学会数组(Python实现动态数组)
Python序列类型 在本博客中,我们将学习探讨Python的各种"序列"类,内置的三大常用数据结构--列表类(list).元组类(tuple)和字符串类(str). 不知道你发现 ...
- 常用数据结构-线性表及Java 动态数组 深究
[Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...
- 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路
01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...
- 纯数据结构Java实现(1/11)(动态数组)
我怕说这部分内容太简单后,突然蹦出来一个大佬把我虐到哭,还是悠着点,踏实写 大致内容有: 增删改查,泛型支持,扩容支持,复杂度分析.(铺垫: Java语言中的数组) 基础铺垫 其实没啥好介绍的,顺序存 ...
- C/C++顺序数据结构——动态数组测试
这是一篇顺序表数据结构——动态数组的测试, 实现 //初始化数组 //插入 //根据位置删除 //根据值删除 //查找 //打印 //释放动态数组的内存 //清空数组 //获得动态数组容量 //获得动 ...
- 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)
目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...
随机推荐
- 基本select 语句总结
--------------基本select语句总结 8.6---------------------------------------------------------------------- ...
- InsertSql
declare @hobby table(hobbyID int,hName nvarchar(100));insert into @hobby(hobbyID,hName)Select 1,'爬山' ...
- Git Step by Step – (3) Git对象模型
前面一篇文章介绍了本地仓库的一系列操作,下面我们将进一步了解Git的工作原理,介绍Git对象模型. 刚开始使用Git的时候,对Git对象模型.工作原理并不理解,但是经过一段时间的使用.熟悉之后,然后再 ...
- 我的notepad++
我觉得,做开发的一定要有一个简单,但功能强大的文本编辑器.我比较喜欢notepad++,而且一直使用.准备通过这篇文章分享一下我的notepad++配置. 希望广大notepad++用户,如果有好的配 ...
- flexbox常用布局左右固定,中间自适应
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- win10进入到安全模式的三种方法
这里介绍三种方法: 如果能够进入到系统 点击开始--设置--更新和安全--恢复,右侧点击高级启动中的立即重启 能够进入到登陆界面 进入到登录屏幕后,在按住 Shift 键的同时依次选择“电源” > ...
- VC++6.0相对路径无效的解决办法
我们在开发程序时,常常需要操作相关的文件.操作文件一般有两种方法:绝对路径和相对路径.绝对路径是从盘符开始的,相对路径则是相对于当前目录. 绝对路径很简单,一般也不会出错,但是在实际开发过程中要慎用绝 ...
- Kubernetes kubectl 命令
kubectl 命令用来操作 Kubernetes 集群中的资源对象,包括对资源的创建.删除.查看.修改.配置.运行等 命令语法:kubectl [command] [TYPE] [NAME] [fl ...
- 解决16bit压缩贴图失真问题
选择索引模式
- oracle如何链接到另外一个数据库DB_LINK
命令创建从一个库连接的另外一个库: create database link DB_XXX --创建连接的名字connect to db_xxx --数据库名identified by DB-XXX ...