数据结构之Array

python数据结构之Array

import ctypes

class Array:
    def __init__(self, size):
        assert size > 0, "Array size must be > 0 "
        self._size = size
        pyArrayType = ctypes.py_object * size
        self._elements = pyArrayType()
        self.clear(None)

    def clear(self, value):
         for index in range(len(self)):
             self._elements[index] = value

    def __len__(self):
        return self._size

    def __getitem__(self, index):
        assert index >= 0 and index < len(self), "index must >=0 and <= size"
        return self._elements[index]

    def __setitem__(self, index, value):
        assert index >= 0 and index < len(self), "index must >=0 and <= size"
        self._elements[index] = value

    def __iter__(self):
        return _ArrayIterator(self._elements)

class _ArrayIterator:
    def __init__(self, theArray):
        self._arrayRef = theArray
        self._curNdr = 0

    def __next__(self):
        if self._curNdr < len(theArray):
            entry = self._arrayRef[self._curNdr]
            sllf._curNdr += 1
            return entry
        else:
            raise StopIteration

    def __iter__(self):
        return self

class Array2D :
    def __init__(self, numRows, numCols):
        self._theRows = Array(numCols)
        for i in range(numCols):
            self._theRows[i] = Array(numCols)

    def numRows(self):
        return len(self._theRows)

    def numCols(self):
        return len(self._theRows[0])

    def clear(self, value):
        for row in range(self.numRows):
            self._theRows[row].clear(value)

    def __getitem__(self, ndxTuple):
        assert len(ndxTuple) == 2, "the tuple must 2"
        row = ndxTuple[0]
        col = ndxTuple[1]
        assert row>=0 and row <len(self.numRows()) \
        and col>=0 and col<len(self.numCols), \
        "array subscrpt out of range"
        theArray = self._theRows[row]
        return theArray[col]

    def __setitem__(self, ndxTuple, value):
        assert len(ndxTuple)==2, "the tuple must 2"
        row = ndxTuple[0]
        col = ndxTuple[1]
        assert row >= 0 and row < len(self.numRows) \
        and col >= 0 and col < len(self.numCols), \
        "row and col is invalidate"
        theArray = self._theRows[row];
        theArray[col] = value


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值