【Python数据结构与算法】(二):数组列表(ArrayList)

【Python数据结构与算法】(二):数组列表(ArrayList)

  • ✨本文收录于《Python数据结构与算法》专栏,此专栏主要记录如何python学习数据结构与算法笔记。
  • 个人主页:JoJo的数据分析历险记
  • 个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 如果文章对你有帮助,欢迎✌关注点赞、✌收藏订阅专栏

文章目录

  • 【Python数据结构与算法】(二):数组列表(ArrayList)
  • 1. 数组列表(ArrayList)
  • 2. 数组(Array)
  • 3. Python内置的列表(List)
  • 4. 创建一个List类

1. 数组列表(ArrayList)

数组列表是最常用的数据结构之一,其基础知识如下:

  • 按顺序存储数据
  • 连续存储
  • 允许添加或删除元素的随机访问、可变大小的列表数据结构
  • 例如,可用酒店房间列表、城市列表和书籍列表

数据抽象化:

  • 要明确我们操作的数据元素
  • 确定需要进行的操作
  • 对这些操作定义完整的接口
  • 完成对象
  • 得到我们的抽象数据类型

2. 数组(Array)

数组(Array),数组定义了一个序列数据结构,它看起来很像一个列表,除了所有成员必须是相同的类型。支持的类型都是数字或其他固定大小的原始类型。

其基本特征如下:

  • 数组必须是连续的
  • 数组长度是固定的
  • 可以索引,0为开始值
  • 数组里面放的数据类型是一样的,注意和我们的列表不一样
  • 边界检查,超过索引会报错

3. Python内置的列表(List)

在python中,我们可以直接使用list来创建一个列表。其基本操作包括:

  • 创建列表:list = [1,2,3]

  • 得到列表的长度: len(list)

  • 添加元素:list.append(a)

  • 删除元素:list.pop()

  • 删除整个列表:del list

  • 排序:list.sort()

  • 索引:list[a:b]

各项操作的时间复杂度如下:

【Python数据结构与算法】(二):数组列表(ArrayList)_第1张图片

4. 创建一个List类

上面我们介绍了python中内置list的一些基本操作,接下来,我们自己创建一个list类,具体代码如下:

import ctypes

class ListArray:
    
    def __init__ (self):
        '生成一个空的列表.'
        self._n = 0 #当前列表的内容长度
        self._capacity = 10#列表容量
        self._A = self._make_array(self._capacity)
        
    # len(list)
    def __len__ (self):
        return self._n
    """判断是不是空的数组"""
    def is_empty(self):
        return self._n == 0
    """生成动态数组"""
    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 
    """
    第k个元素是多少
    时间复杂度为: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

    """
    在第k个位置插入一个元素
    时间复杂度: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
    """
    删除某一个指定的value
    时间复杂度:O(n)
    """    
    def remove(self, value):
        for k in range(self._n):
            if self._A[k] == 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' )
    """
    删除最后一个元素
    时间复杂度:O(1)
    """
    def pop(self):
        self._A[self._n] = None    
        self._n -= 1
    """
    进行排序
    时间复杂度:O(nlogn)
    """
    def sort(self):
        for i in range(1, self._n):
            B = self._A[i]
            j = i - 1
            while j >= 0 and self._A[j] > B:
                self._A[j + 1] = self._A[j]
                j -= 1
            self._A[j + 1] = B

    def _print(self):
        for i in range(self._n):
            print(self._A[i], end = ' ')
        print()
mylist = ListArray()
print ('size was: ', str(len(mylist)))
mylist.append(1)
mylist.append(2)
mylist.append(3)
mylist.insert(0, 4)
mylist.insert(1, 5)
mylist._print()#此时列表中有五个数据
mylist.pop()#删除最后一个元素
mylist.remove(1)#删除元素1
mylist.sort()#排序
mylist._print()#打印排序后的列表
print ('size is: ', str(len(mylist)))
4 5 1 2 3
size was:  0
2 4 5 
size is:  3

在这里插入图片描述
本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!

你可能感兴趣的:(Python数据结构与算法,数据结构,开发语言,数组列表,python)