数组

JavaScript中创建数组的方式

烂漫一生 提交于 2020-03-31 10:29:44
1. 通过构造函数创建数组 创建一个指定大小的数组 let 数组名称 = new Array(数组长度); 创建一个空数组 let 数组名称 = new Array(); 创建一个给定数据的数组 let 数组名称 = new Array(data1, data2, data3...); 2. 通过字面量创建数组 创建一个空数组 let 数组名称 = []; 创建一个给定数据的数组 let 数组名称 = [data1, data2, data3...]; 示例代码 <script> //通过构造函数创建数组 let arr1 = new Array(3); arr1[0] = 11; arr1[1] = 12; arr1[2] = 13; let arr2 = new Array(); arr2[0] = 20; arr2[1] = 21; arr2[2] = 22; let arr3 = new Array(31, 32, 33); console.log(arr1); console.log(arr2); console.log(arr3); //通过字面量创建数组 let arr4 = []; arr4[0] = 41; arr4[1] = 42; arr4[2] = 43; let arr5 = [51, 52, 53]; console.log(arr4); console

Java集合(2)一 ArrayList 与 LinkList

梦想与她 提交于 2020-03-31 08:54:02
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树、TreeMap与TreeSet(上) Java集合(4)一 红黑树、TreeMap与TreeSet(下) Java集合(5)一 HashMap与HashSet 引言 ArrayList<E>和LinkList<E>在继承关系上都继承自List<E>接口,上篇文章我们分析了List<E>接口的特点:有序,可以重复,并且可以通过整数索引来访问。 他们在自身特点上有很多相似之处,在具体实现上ArrayList<E>和LinkList<E>又有很大不同,ArrayList<E>通过数组实现,LinkList<E>则使用了双向链表。将他们放到一起学习可以更清楚的理解他们的区别。 框架结构 从上面的结构图可以看出ArrayList<E>和LinkList<E>在继承结构上基本相同,值得注意的是LinkList<E>在继承了List<E>接口的同时还继承了Deque<E>接口。 Deque<E>是一个双端队列的接口,LinkList<E>由于在实现上采用了双向链表,所以可以很自然的实现双端队列头尾进出的特点。 数据结构 上一篇文章中我们说过,为什么一个Collection<E>接口会衍生出这么多实现类,其中最大的原因就是每一种实现在数据结构上都有差别

数据结构---数组

≡放荡痞女 提交于 2020-03-31 08:35:43
线性表 ,顾名思义就像一条线一样,线性表是有序的,这个 “有序”不是从小到大之类的概念。当然与之对应就是 散列表 ,散就是乱的,无序的。 Java 中 List 和 Set ,我们遍历 List 每次结果都是一样,这就是所谓的有序,遍历 Set ,每次出来的结果可能都不一样,这就是无序的。 数组 是一种相同数据类型的元素组成的集合,是一种线性表,同样属于线性表结构的还有链表,队列,栈。 数组在内存需要连续的空间来存放,这就是为什么申明数组的时候一定要设置大小,因为只有设置了大小,才知道这个数组需要多大的内存空间,才能去内存中寻找大小合适的空间存放。正是因为它是连续的,而且都是有下标索引的,所以具有很好的随机访问性。 为什么数组具有很好的随机访问性?为什么数据可以根据下标访问?为什么下标要从 0 开始? 这就要说一下数组存储结构。 比如 int[] arr = new int[2] 这个数组去内存开辟空间的时候, 假如 arr 在内存的位置是从 1000 开始的,那么 Arr[0] 在内存中的位置是    1000 Arr[1] 在内存中的位置是    1000 + arr[0] 数据大小 Arr[2] 在内存中的位置是    1000 + arr[0] 数据大小 + arr[1] 数据大小 因为数组都是同一种数据类型所以每个元素的数据大小是一样的,换做如下表示就更清晰了 Arr[0

星号的秘密

北慕城南 提交于 2020-03-30 17:20:42
1 、乘法运算符 2 、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解: int* p1, p2; 这儿给人的感觉似乎是定义了两个指针型变量p1和p2,但是,事实上,这种直觉是错误的,正确的理解方式是int *p1, p2;即p1是指针型的,而p2确是整型的。 在MS VC++ 6.0中,是按照后面一种格式写的。 3 、何谓指针? 指针仅仅表示一个内存中的某个地址? 非也,注意到,我们在定义指针的时候,都关联了一个类型,如int,char,或者是string等等,如果说指针仅仅表示一个内存中的地址,那何必要关联这么多变化的东西呢?完全可以DWORD p=0;这样解决问题。 关联了的数据类型是作何用的呢? 它可以指示编译器怎样解释特定地址上内存的内容,以及该内存区域应该跨越多少内存单元。如 int *p; 编译器可以从这个定义中获得信息:1、p指向的内存存放的是整型数据,2、由于该内存区域只存放了一个数据,跨越的内存区域为4个字节,即p+1的效果是跳过了四个字节。 另一个复杂一点的例子,如 struct a {int x1; short x2; a *next; } 定义指针 a

C++星号的含义

爷,独闯天下 提交于 2020-03-30 17:03:04
1 、乘法运算符 2 、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解: int* p1, p2; 这儿给人的感觉似乎是定义了两个指针型变量p1和p2,但是,事实上,这种直觉是错误的,正确的理解方式是int *p1, p2;即p1是指针型的,而p2确是整型的。 在MS VC++ 6.0中,是按照后面一种格式写的。 3 、何谓指针? 指针仅仅表示一个内存中的某个地址? 非也,注意到,我们在定义指针的时候,都关联了一个类型,如int,char,或者是string等等,如果说指针仅仅表示一个内存中的地址,那何必要关联这么多变化的东西呢?完全可以DWORD p=0;这样解决问题。 关联了的数据类型是作何用的呢? 它可以指示编译器怎样解释特定地址上内存的内容,以及该内存区域应该跨越多少内存单元。如 int *p; 编译器可以从这个定义中获得信息:1、p指向的内存存放的是整型数据,2、由于该内存区域只存放了一个数据,跨越的内存区域为4个字节,即p+1的效果是跳过了四个字节。 另一个复杂一点的例子,如 struct a {int x1; short x2; a *next; } 定义指针 a

C++ 指向数组的指针

僤鯓⒐⒋嵵緔 提交于 2020-03-30 16:08:14
如果您对 C++ 指针的概念有所了解,那么就可以开始本章的学习。数组名是一个指向数组中第一个元素的常量指针。因此,在下面的声明中: double balance[50]; balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址: double *p; double balance[10]; p = balance; 使用数组名作为常量指针是合法的,反之亦然。因此,*(balance + 4) 是一种访问 balance[4] 数据的合法方式。 一旦您把第一个元素的地址存储在 p 中,您就可以使用 *p、*(p+1)、*(p+2) 等来访问数组元素。下面的实例演示了上面讨论到的这些概念: #include <iostream> using namespace std; int main () { // 带有 5 个元素的整型数组 double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; p = balance; // 输出数组中每个元素的值 cout << "使用指针的数组值 " << endl; for ( int i = 0; i < 5; i++ ) { cout << "*(p + " <<

4L-线性表之数组

假装没事ソ 提交于 2020-03-30 15:06:21
关注公众号 MageByte,设置星标点「在看」是我们创造好文的动力。后台回复 “加群” 进入技术交流群获更多技术成长。 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。 你一定会说数组这么简单,有啥说的。嘿嘿嘿,里面包含的玄机可不一定每个人都知道。 今天的疑惑来了….. 数组几乎都是从 0 开始编号的,有没有想过 为啥数组从 0 开始编号,而不是从 1 开始呢? 使用 1 不是更符合人类的思维么? 数组简介 数组是一种线性表数据结构,用一组连续的内存空间来存储一组具有相同类型的数据。 里面出现了几个重要关键字,线性表、连续内存空间和相同类型数据,这里解释下每个关键词的含义。 线性表 就是数据排成像线一样的结构,就像我们的高铁 G1024 号,每节车厢首尾相连,数据最多只有「前」和「后」两个方向。除了数组,链表,队列,栈都是线性结构。 非线性表 比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。 连续的内存空间 正式由于它具有连续的内存空间和相同的数据类型的数据。就有一个牛逼特性:「随机访问」。很多人面试的时候一定被问数组与链表有什么区别?多数会回答 “链表适合插入、删除,时间复杂度 O(1);数组适合查找,查找时间复杂度为 O(1)”。

总结各类错误(always online)

蓝咒 提交于 2020-03-30 13:09:45
最近发现打暴力(还有梦想中的正解)都会打错,决定好好总结一下各种坑比错误QAQ 一定要好好看数据范围,接近 int 类型上限,如果要求和,一定要开 long long 并且改大你的 inf 值(TAT暴力分流失) 提交之前,好好看看你的输出,有没有少或者多,并且检查格式错误。 对于后面的点,如果要混分的话,一定要注意数组的大小!!!(NOI2017同步赛和8.4的都少了10分QAQ)(NOI2018同步赛又少了 20 分,以后不要怂空间直接大力开数组就行啦) \(Floyd\) 的循环一定要记得 \(*k\) 一定要在最外层!!! 一定要认真读题,看看是要输出第一个还是要输出几个答案!!! 一定要多测几组数据,而且要反常规的数据! 一定要删掉调试信息,最后10分钟编译一下,测下样例! 拓扑排序一定要从入度为0的点进去!Tarjan缩点(强连通分量)一定是有向图!! 有时候实在想不到 \(dp\) 就去做贪心算了! 费用流建反向弧的时候一定要记住,费用为相反数,流量为0! \(Splay\) 查找第 \(k\) 大的时候,一定要记得先减,在向下走,不然会减下面的!!! \(Splay\) 查找第 \(k\) 大的时候,一定要记得先下放标签啊!!!各种没有先 \(Splay\) 的东西,都要 \(push \ down\) 啊!!! \(Treap\) 删除的时候,递归下去,走的应该是

212

▼魔方 西西 提交于 2020-03-30 12:33:24
数据结构 在 JDK1.8 中,HashMap 是由 数组+链表+红黑树 构成 当一个值中要存储到HashMap中的时候会根据Key的值来计算出他的hash,通过hash值来确认存放到数组中的位置,如果发生hash冲突就以链表的形式存储,当链表过长的话,HashMap会把这个链表转换成红黑树来存储 在看源码之前我们需要先看看一些基本属性 //默认初始容量为16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //默认负载因子为0.75 static final float DEFAULT_LOAD_FACTOR = 0.75f; //Hash数组(在resize()中初始化) transient Node<K,V>[] table; //元素个数 transient int size; //容量阈值(元素个数超过该值会自动扩容) int threshold; table数组里面存放的是Node对象,Node是HashMap的一个内部类,用来表示 来源: https://www.cnblogs.com/miaowwwww/p/12597353.html

C++ sort()排序函数用法

拟墨画扇 提交于 2020-03-30 12:31:14
本文转自https://blog.csdn.net/l198738655/article/details/79872738 sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list、向量排序。 实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择推排序。 此函数有3个参数: 参数1:第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。 参数2:第二个参数相对较好理解,即首地址加上数组的长度n(代表尾地址的下一地址)。 参数3:默认可以不填,如果不填sort会默认按数组升序排序。也就是1,2,3,4排序。也可以自定义一个排序函数,改排序方式为降序什么的,也就是4,3,2,1这样。 使用此函数需先包含: #include <algorithm> 并且导出命名空间: using namespace std; 简单例子:对数组A的0~n-1元素进行升序排序,只要写sort