Array && Dynamic Array

Array(数组)

盛有单一类型固定数量值的容器类

  • 以0开始的索引
  • 有数组长度属性(长度不一定等于容器大小)
  • 内存表示(连续的)
  • 边界检查

Dynamic Array(ADT 抽象数据类型)

  • 数组的容量动态可变
  • 存放的东西不限制类型

自定义动态数组

# -*- coding:utf-8 -*-
# @Author :xuchaoqiang

import ctypes


class DynamicArray:

    def __init__(self):
        # Create an empty array
        self._n = 0  # size
        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

    # 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:
                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()


if __name__ == '__main__':
    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)))

Python List各个操作的时间复杂度

 

原文地址:https://www.cnblogs.com/Xuuuuuu/p/12845274.html