数组和字符串操作(一):读物

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uestcyms/article/details/87558405

数组和字符串操作:读物

数组

数据结构的一种;又称静态数组。

简要介绍

数组内部的元素在内存中存储是有序的,一个接一个。数组的每一个元素都有一个索引,从0开始。

优势

  • 快速索引:无论数组的长度如何,检索给定索引处的元素都需要时间。
  • 快速添加:在数组的末尾添加元素

劣势

  • 固定大小:存储数组前,需要先定义好数组的大小 (除非你使用的是动态数组)。
  • 费时的插入和删除:你必须“越过”其他元素来填补或缩小差距,这需要最坏的时间。

在Python中,不存在这样简单的数组,python中多为动态数组。
JAVA示例:

int gasPrices[] = new int[10]; gasPrices[0] = 346; gasPrices[1] = 360; gasPrices[2] = 354;

插入

在这里插入图片描述

删除

在这里插入图片描述

数组切片

数组切片包含了从数组中取出一个子集,重新分配内存给这个新数组并使用取出的元素进行初始化。
对于python,可以从原有列表中创建一个新的列表。

my_list[start_index:end_index] //取my_list的start_index到end_index元素形成新的数组
my_list[index]//可以通过这样的方式访问新数组

但需要特别注意,这里隐含着空间和时间的消耗,作了如下工作:

  1. 分配了一个新的列表
  2. 将源列表的元素拷贝至新列表

这里消耗的时间和空间。时间和空间的复杂度均为O(n).
所以使用数组切片的时候,睁大眼睛,谨慎使用

数组内部操作

内部操作会直接作用与输入并且会改变它,不是创建然后返回一个新的对象(引用,指针)。原始的输入会被破坏掉。
注意,内部操作并不意味着不创建任何新的变量,其实,它的意思是不会创建一个输入的拷贝。通常内部操作函数仅仅创建哪些新增的变量。
下面又两个函数:一个是内部操作,一个是外部操作

扫描二维码关注公众号,回复: 5439198 查看本文章
#内部操作
def square_list_in_place(int_list):
	for index, element in enumerate(int_list): 
		int_list[index] *= element # NOTE: We could make this function just return, since we modify int_list in place.
	return int_list 

#外部操作
def square_list_out_of_place(int_list): # We allocate a new list with the length of the input 
	list squared_list = [None] * len(int_list)
	for index, element in enumerate(int_list): 
		squared_list[index] = element ** 2
	return squared_list

内部操作有利于节省空间,但它对周边会产生影响
外部操作有利于保证外部相关逻辑的正确性。
如果你非常在意空间且非常确定后续不会再使用原始的输入(调试也不行),此时,你可以使用内部操作。

其实就是函数传参时,是传值还是传址。

动态数组

别名有array list、growable list、resizable list、mutable list

简介

动态数组有个重大的改进:自动扩容。
优势

  • 快速索引,和普通数组相同
  • 可变长度,可以添加任意数量的元素。
  • 缓存友好,和普通数组相同,由于其中元素都是相邻的存储,有利于缓存。

劣势

  • 添加较耗时,一般情况下,向数组末尾添加元素耗时一般。但当刚好动态数组没有足够空间容纳这个元素时,它就需要进行扩容,这是就会非常耗时
  • 插入和删除耗时,同普通数组相同。

大小和容量

在这里插入图片描述

动态数组会存储末尾索引,这样动态数组就可以追踪到末尾在哪和从哪新增元素。

双倍添加

在这里插入图片描述

为什么不再就的数组下面直接进行扩容,因为数组下面的内存有可能已经被其他程序所占用。

动态数组添加的时候,存在平均耗时和最差耗时,当需要扩容时,就是最差的情况,double time。
使用动态数组时也需要格外注意性能

猜你喜欢

转载自blog.csdn.net/uestcyms/article/details/87558405
今日推荐