数据结构:学习笔记1
线性表:线性表(Linear List)是具有相同特性的数据元素的一个有限序列。
特点:位置上的有序性就是一种线性关系,注意,这种前后关系是逻辑而非物理意义上的(就好比银行进行了改革,使用排队机进行排队,所有储户分散在银行的各个角落,他们取钱的顺序是依据从排队机获取的纸条上的号数来决定的。)
线性表的顺序存储结构—顺序表
线性表的顺序存储结构是指用一块地址连续的存储空间依次存储线性表的数据元素。这种存储方式好比改革前的银行,需要在业务窗口前排队取钱。由此可以看出顺序表中逻辑上相邻的元素在物理上也是相邻的
顺序表的特点
1. 容量固定
2. 访问速度快
在顺序表使用索引访问数据元素是非常简单、快速的。
In Csharp
线性表的顺序存储结构在C#中的最直接表现形式就是数组
在C#语言中,数组是最基础也是存取速度最快的一种集合类型。数组是引用类型,保存它们所需的内存空间会在托管堆上分配,一旦数组被创建,其中的所有元素将被初始化为它们的默认值
int[] arrInt = new int[5];
arrInt[2] = 5;
arrInt[4] = 3;
以上代码声明了一个值类型int的数组,并把它的长度初始化为5,最后分别给第3和第5个元素赋值
当数组元素为值类型时,数组对象存放的是值类型对象本身。当元素为引用类型时,数组对象存放的则是对象的引用(指针)。
2.2.3 ArrayList
ArrayList又被称为动态数组,它的存储空间可以被动态改变,同时还拥有添加、删除元素的功能。
2.2.4 类型安全
数组和ArrayList的本质区别在于前者是类型安全的,而后者不是类型安全的。ArrayList为了兼容所有类型的对象,使用了object数组,这给使用带来了一些的麻烦
在使用集合中的元素时,数组不需要进行强制类型转换,而ArrayList必须要经过强制类型转换才能使用。这是因为ArrayList实际存放的是object对象,要按照这些对象原本的类型来使用就必须要使用强制类型转换
ArrayList的这个特点带来了类型安全问题,如:
ArrayList arrL = new ArrayList();
arrL.Add(5);
arrL.Add("Hello World");
arrL.Add(new Button());
以上代码在集合中存放了各种各样的数据类型,但这样做是被允许的。这种类型的不安全一方面给程序带来了隐患,另一方面如果集合中存放的是值类型还会产生装箱和拆箱操作,降低了程序的性能
.NET 2.0版本的泛型的出现完美地解决了上述问题,新版本使用System.Collections.Generic命名空间下的List类取代了原来的ArrayList类。下面演示了泛型List类的使用:
List<int> arrL=new List<int>();
arrL.Add(1);
arrL.Add(2);
可以看到,第一行代码在集合创建时就已经把元素类型限定为int,它是类型安全的,同时避免了装箱和拆箱操作。

浙公网安备 33010602011771号