前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构-数组

数据结构-数组

作者头像
用户1081422
发布2020-04-08 10:15:25
4160
发布2020-04-08 10:15:25
举报
文章被收录于专栏:T客来了

摘要

  • 初衷
  • 实现一个静态数组(python 版)

1 初衷

工作了一段时间后,发现基础实在是太重要了,老话说: 万丈高楼平地起。地基不牢,肯定跑不快,天花板也愈发明显。

除了传统互联网业务,其实认知外围还有很多有趣的事情可以去做,而且这些事情更考验基础能力。躬身入局,探索其中的乐趣。比如我现在做的事情,基本脱离传统互联网业务,遇到了更细微的场景。比如现在做的 ae 二次开发,面对一些场景,需要设计数据结构、考虑内存的高效使用、快速存取;

准备将数据结构再碾压一遍:

那就从最简单的数组开始,自主实现这些数据结构,探索经常使用的api是如何构建的,实现一个好用的Api, 其实也是为客户提供良好服务的体现,服务不应该局限于网络to c ,to b 服务。

2. 实现一个静态数组

2.1 示意图

2.2 代码如下:

代码语言:javascript
复制
#!/usr/bin/env python
 
# -*- coding: utf-8 -*-
 
"""
 
# @Time    : 2020/1/18 下午7:36
 
# @Author  :
 
# @Site    :
 
# @File    : Array.py
 
# @Software: PyCharm
 
# 自己实现的static array
 
"""
 


 


 
class Array:
 
 def __init__(self, capacity=None):
 
 """
 
        包含无参和有参两种情况
 
        :param capacity:
 
        """
 
 if capacity is None:
 
 # self.data = []
 
            self._data = [0] * 10
 
 else:
 
            self._data = [0] * capacity
 
        self._size = 0
 


 
 def get_size(self):
 
 """
 
        当前结构中已存储的元素的个数
 
        :return:
 
        """
 
 return self._size
 


 
 def get_capacity(self):
 
 return len(self._data)
 


 
 def is_empty(self):
 
 return self._size == 0
 


 
 def add_first(self, val):
 
        self.add(0, val)
 


 
 def add_last(self, val):
 
        self.add(self._size, val)
 


 
 def add(self, index, val):
 
 """
 
        向数组指定位置插入val
 
        :param index:
 
        :param val:
 
        :return:
 
        """
 
 if self._size == len(self._data):
 
 # 已有元素的个数 == 数组的capacity
 
 raise (Exception, 'AddList failed. Array is full')
 


 
 if index < 0 or index > self._size:
 
 raise (Exception, 'AddList failed. require index >=0 and index <= size')
 


 
 # 目标位置元素向后移动
 
 for i in range(self._size - 1, index - 1, -1):
 
            self._data[i + 1] = self._data[i]
 


 
        self._data[index] = val
 
        self._size += 1
 


 
 def to_string(self):
 
        res_str_arr = []
 
        res_str_arr.append('Array: size = %d, capacity = %d; ' % (self._size, len(self._data)))
 
 for i in range(0, self._size):
 
            val = self._data[i]
 
 if isinstance(val, int):
 
                val = str(val)
 
            res_str_arr.append(val)
 
 if i != self._size - 1:
 
                res_str_arr.append(',')
 
        res_str_arr.append(']')
 
 return "".join(res_str_arr)
 


 
 def get(self, index):
 
 """
 
        保证数据安全,用户无法知晓整个数组的详情
 
        :param index:
 
        :return:
 
        """
 
 if index < 0 or index > self._size:
 
 raise ValueError('index beyond arr size or index under 0, size is %d' % self._size)
 
 return self._data[index]
 


 
 def set(self, index, val):
 
 if index < 0 or index > self._size:
 
 raise ValueError('index beyond arr size or index under 0, size is %d' % self._size)
 
        self._data[index] = val
 


 
 def contains(self, val):
 
 for i in range(self._size):
 
 if self._data[i] == val:
 
 return True
 
 return False
 


 
 def find(self, val):
 
 for i in range(self._size):
 
 if self._data[i] == val:
 
 return i
 
 return -1
 


 
 def remove(self, index):
 
 """
 
        从数组中删除某一位置的元素,并返回被删除的元素
 
        :param index:
 
        :return:
 
        """
 
 if index < 0 or index > self._size:
 
 raise ValueError('index beyond arr size or index under 0, size is %d' % self._size)
 


 
        ret = self._data[index]
 


 
 for i in range(index, self._size - 1):
 
            self._data[i] = self._data[i + 1]
 
        self._size -= 1
 


 
 return ret
 


 
 def remove_first(self):
 
 return self.remove(0)
 


 
 def remove_last(self):
 
 return self.remove(self._size - 1)
 


 
 def remove_element(self, val):
 
 """
 
        find数组中第一次出现的元素,并删除
 
        :param val:
 
        :return:
 
        删除一个元素: 先找 后 删除
 
        """
 
        index = self.find(val)
 
 if index != -1:
 
            self.remove(index)
 


 


 
if __name__ == '__main__':
 
 # new 自己的Array 类
 
    arr = Array(20)
 


 
 for i in range(0, 10):
 
        arr.add_last(i)
 


 
 print(arr.to_string())
 


 
    arr.add(1, 666)
 
 print(arr.to_string())
 


 
    arr.add_first(-1)
 
 print(arr.to_string())
 
 print(arr.get(0))
 
 print(arr.to_string())
 


 
    arr.remove(1)
 
 print(arr.to_string())
 


 
    arr.remove(2)
 
 print(arr.to_string())
 


 
    arr.remove_first()
 
 print(arr.to_string())
 


 
    arr.remove_last()
 
 print(arr.to_string())
 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 T客来了 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 1 初衷
  • 2. 实现一个静态数组
    • 2.1 示意图
      • 2.2 代码如下:
      相关产品与服务
      数据安全治理中心
      数据安全治理中心(Data Security Governance Center ,DSGC)从企业数据安全治理、数据安全合规出发,提供云原生数据资产管理、数据分类分级、风险评估等能力;帮助企业解决合规应对、敏感数据排查、数据安全风险检测等多方面的数据安全问题,降低数据安全治理TCO,提高数据安全保障能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档