【python】python数据结构(一)——线性表:顺序表的实现

本文详细介绍使用Python实现的数据结构,包括线性表、字符串、栈和队列等,并深入探讨了顺序表与链表的特点,以及Python中list的具体实现方式。

前言

这一系列文章将介绍基于python语言的数据结构,主要涉及线性表、字符串、栈和队列、二叉树和树、图、字典和集合、排序等。

线性表及分类

线性表是一类元素序列的抽象,是某类元素的集合,记录着元素之间的顺序关系。python中的list和tuple都支持线性表的需要,只是tuple中元素固定,而list则灵活的多。

顺序表:将表中元素顺序地存储在一大块连续的存储区内,这样实现的表称为顺序表。

链表:将元素存储在由链接构造起来的一系列存储块内,这样实现的表称为链表。

基本操作

创建和访问操作

创建空表:分配存储区,记录表的容量并将元素计数值设为0,创建新表的存储区后,设置信息记录域(max和num),保证表处于合法状态。
加入元素:list.insert(i,x),将元素x插入到第i个位置
删除元素:del list[i],删除第i个元素;list.remove(x),删除值为x的元素

顺序表的优缺点

优点:O(1)时间的按位置访问元素;元素在表里存储紧凑,除表元素存储区外只需要O(1)空间存放少量的辅助信息。
缺点:需要连续存储,一旦确定存储块大小,表的存储容量就确定,更改麻烦,在执行加入和删除操作时,要移动许多元素。

Python中list基本实现

list是一种采用分离式技术实现的动态记录顺序表。
加入元素:list.insert(len(list),x),另一种等价写法:list.append(x)
list的实际策略:建立空表时,系统分配8个元素的存储区;在执行插入操作时,如果元素区满就换一块四倍大的存储区;如果表已经过大,换存储区时容量加倍。

一些操作的主要性质

len(list):计算列表元素个数,O(1)
元素访问,尾端加入和尾端删除都是O(1)操作
一般位置的元素插入、删除、替换、表连接(extend)都是O(n)操作
pop操作删除表尾元素复杂度为O(1),一般元素复杂度为O(n)
list.clear()清除list中所有元素,O(1)操作
list.reverse()元素顺序倒置,复杂度为O(n)
def reverse(self):
    elems = self.elements
    i, j = 0, len(elems)-1
    while i < j:
        elems[i], elems[j] = elems[j], elems[i]
        i, j = i+1, j-1
list.sort()表中元素排序,最好的排序算法的平均和最坏情况的时间复杂度都是O(nlogn)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值