《第6章数组与集合.ppt》由会员分享,可在线阅读,更多相关《第6章数组与集合.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6.1 一维数组一维数组6.2 二维数组二维数组6.3 交错数组交错数组6.4 遍历数组遍历数组6.5 常用集合常用集合6.6 小结小结6.1 一维数组一维数组6.1.1 一维数组的创建及初始化一维数组的创建及初始化一维数组的声明与分配语句的语法形式:一维数组的声明与分配语句的语法形式:数据类型符数据类型符 数组名数组名 = new 数据类型符数据类型符长度长度;或者或者数据类型福数据类型福 数组名;数组名;数组名数组名=new 数据类型符数据类型符长度长度; 示例:示例:double score=new double300 ;或者形式如下。或者形式如下。double score; score
2、=new double 300 ; 6.1.1 一维数组的创建及初始化为数组元素赋初值的语法形式:为数组元素赋初值的语法形式:数据类型符数据类型符 数组名数组名 = 初值列表初值列表;或者形式如下。或者形式如下。数据类型符数据类型符 数组名数组名=new 数据类型符数据类型符 初值列表初值列表;示例:示例:int x=1,2,3,4;int x=new int 1,2,3,4;6.1.2 一维数组的简单应用 示例:示例:double aver = 0.0;double score=new double300 ;for(int i=0;i300;i+) scorei=i;for (int j =
3、 0; j 300; j+) aver = aver + scorej; aver = aver / 300;6.2 二维数组二维数组6.2.1 二维数组的创建及初始化二维数组的定义与分配语法形式:数据类型符数据类型符 , 数组名数组名 =new数据类型符数据类型符长度长度1,长度长度2;或者数据类型符数据类型符 , 数组名数组名;数组名数组名=new 数据类型符数据类型符 长度长度1,长度长度2;示例: int , a=new int 3,4; 或者 int , a; a=new int 3,4; /为数组分配存储空间为数组分配存储空间 6.2.1 二维数组的创建及初始化为数组元素赋初值的语
4、法形式:为数组元素赋初值的语法形式:数据类型符数据类型符 , 数组名数组名 =new int , 初始列表初始列表1,初始列表初始列表2, ,初始列初始列表表n ;或者形式如下。或者形式如下。数据类型符数据类型符 , 数组名数组名 =初始列表初始列表1,初始列表初始列表2,初始列表初始列表n ;示例:示例: int,a=new int ,1,2,3,4,5,6; 或者:或者: int,a=1,2,3,4,5,6;6.2.2 二维数组的简单应用示例:示例:某班有某班有M名同学,本学期开了名同学,本学期开了N门课,期末考试后,要统计每个学门课,期末考试后,要统计每个学生的平均分,请编写程序代码实现
5、该功能,要求对于每个学生要输生的平均分,请编写程序代码实现该功能,要求对于每个学生要输入学号和入学号和N门课的成绩。门课的成绩。static void Main(string args) const int M = 2; const int N = 2; int, score= new intM, N + 1; int i, j; double aver = new doubleM; for (i = 0; i M; i+) Console.WriteLine(请输入第请输入第0个人的学号和成绩:个人的学号和成绩:,i+1); score i , 0 = Convert.ToInt32(Con
6、sole.ReadLine(); for (j=1;j=N ;j+) score i, j = Convert.ToInt32(Console.ReadLine(); 6.2.2 二维数组的简单应用接上页接上页for (i = 0; i M; i+) averi = 0; for (j = 1; j = N; j+) averi = averi + score i, j; averi = averi /N ; for (i = 0; i M; i+) Console.WriteLine(); for (j=0;j=N ;j+) Console .Write (0 , score i,j );
7、Console.Write(0 ,aver i ); Console.Read(); 6.3 交错数组交错数组交错数组也属于多维数组,只是其每行的交错数组也属于多维数组,只是其每行的列数均不同。列数均不同。交错数组的定义一般分为两步,以二维数交错数组的定义一般分为两步,以二维数组为例。首先定义二维数组占用的行数,组为例。首先定义二维数组占用的行数,并分配行,然后定义每一个行数组,并分并分配行,然后定义每一个行数组,并分配空间。配空间。6.3.1 交错数组的创建及初始化 分配行:分配行:数据类型符数据类型符 数组名数组名=new 数据类型符数据类型符 行数行数 ; 示例:示例:int b=new
8、 int 3 ; /定义具有定义具有3行的交错行的交错数组各行数组元素个数的分配数组各行数组元素个数的分配 :数组名数组名i=new 数据类型符数据类型符 长度长度; 示例:示例: b0=new int 2;/首行具有两个元素首行具有两个元素 b1=new int 3; /第二行具有第二行具有3个元素个元素 b2=new int 4; /第三具有有第三具有有4个元素个元素6.3.1 交错数组的创建及初始化 交错数组可以在声明时进行初始化。交错数组可以在声明时进行初始化。 示例:示例:int a=new int new int 1,2, new int 3,4,5, new int 6,7,8,
9、9; 或者:或者: int a= new int 1,2, new int 3,4,5, new int 6,7,8,9 ;6.3.2 交错数组的简单应用示例:示例:编程输出杨辉三角的前五行。杨辉三角的编程输出杨辉三角的前五行。杨辉三角的前五行值如下。前五行值如下。11 11 2 11 3 3 11 4 6 4 16.3.2 交错数组的简单应用static void Main(string args) const int M = 5; int yhsj = new intM; int i, j; for (i = 0; i 5; i+) yhsji = new inti + 1; for (i
10、 = 0; i M; i+) yhsji0 = 1; yhsjii = 1; for (i = 2; i 5; i+) for (j = 1; j i; j+) yhsjij = yhsji - 1j - 1 + yhsji - 1j; for (i = 0; i M; i+) Console.WriteLine(); for (j=0;j=i;j+) Console .Write(0 ,yhsj ij ); 6.4 遍历数组遍历数组 6.4.1 使用for循环遍历 在遍历数组时,最常用的3种方式就是使用 A r r a y 类 提 供 的 L e n g t h 属 性 、GetUpperB
11、ound方法和GetLength方法。 遍历一维数组遍历一维数组 示例:示例:int a = 1, 2, 3, 4, 5, 6 ;for (int i = 0; i a.Length; i+) Console.Write(0,-4, ai);Console.Read();6.4.1 使用for循环遍历 示例:通过示例:通过GetUpperBound方法获取数方法获取数组的最高下标。组的最高下标。 int a = 1, 2, 3, 4, 5, 6 ;for (int i = 0; i a.GetUpperBound(0)+1; i+) Console.Write(0,-4, ai);Consol
12、e.Read();6.4.1 使用for循环遍历 遍历二维数组遍历二维数组 示例:示例:int, a = 1, 2, 3, 4, 5, 6 ;int n = a.Length;Console.WriteLine(一共有一共有0个元素!个元素!,n );for (int i = 0; i a.GetLength(0); i+) Console.WriteLine(); for (int j = 0; j a.GetLength (1);j+ ) Console.Write(0,-4, ai,j ); Console.Read();6.4.1 使用for循环遍历 遍历交错数组遍历交错数组 示例:示
13、例:inta = new int 2;a0=new int 1,2,3;a1=new int 4,5;int n = a.Length;Console.WriteLine(一共有一共有0个元素!个元素!,n );for (int i = 0; i a.Length; i+) Console.WriteLine(); for (int j = 0; j a i .Length ; j+) Console.Write(0,-4, aij);Console.Read();6.4.2 使用foreach遍历 一维数组示例:一维数组示例:int numbers = 4, 5, 6, 1, 2, 3, -
14、1, -2, 0 ;foreach (int i in numbers) Console.WriteLine(i);6.4.2 使用foreach遍历 二维数组示例:二维数组示例:int, numbers =new int3,2 4,44 ,5,55 ,6,66;foreach (int i in numbers) Console.Write(0,-3 ,i );Console.Read();6.5 常用集合常用集合6.5.1 ArrayList类ArrayList是一个集合,使用方法与Array类似,但Array是数组,有维数且大小固定, 而ArrayList没有维数,大小不固定,故Arra
15、yList又称为动态数组。常用属性:Count:获取动态数组中实际所包含的元素数Item:获取或设置指定索引处的元素Capacity:获取动态数组的容量大小6.5.1 ArrayList类 常用方法:常用方法:Add、Remove、RemoveAt、Clear、Insert、IndexOf、Reverse、Sort、ToArray、Contains。 示例:示例: ArrayList li = new ArrayList(8); 注意,这里的注意,这里的8指容量,容量与元素的个指容量,容量与元素的个数是两个完全不同的概念,集合中的元素数是两个完全不同的概念,集合中的元素个数通过属性个数通过属性
16、Count获取,而容量则是通获取,而容量则是通过过Capacity属性获取。容量总是大于或等属性获取。容量总是大于或等于元素的个数。于元素的个数。 6.5.1 ArrayList类 示例:示例:static void Main(string args) ArrayList Li = new ArrayList(2); Console.WriteLine(Li中的元素的个数为中的元素的个数为0, Li.Count); Console.WriteLine(Li中的容量为中的容量为0, Li.Capacity ); int arr = new int 10; Console.WriteLine(ar
17、r中的元素的个数为中的元素的个数为0,arr.Length ); Console.Read();添加元素添加元素 Add方法,添加元素,自动添加到列表的方法,添加元素,自动添加到列表的末尾。末尾。 示例:示例:static void Main(string args) ArrayList Li = new ArrayList (); Li.Add(a); Li.Add(nihao ); Li.Add(1); for (int i = 0; i Li.Count; i+) Console.Write(0,-4,Lii ); Console.Read(); 插入元素ArrayList提供了一个用于
18、插入操作的方法提供了一个用于插入操作的方法Insert,该函数的语法形式如下:,该函数的语法形式如下: public void Insert( int index, Object value)示例:示例:ArrayList Li = new ArrayList();string arr = new string wo, men, shi, peng, you ;Li.Add(a);Li.Add(nihao );Li.Add(1);Li.AddRange(arr);Li.Add(21);Console.WriteLine (Li.Count);Console.WriteLine(Li.Capac
19、ity);Console.WriteLine(排序前的顺序为:排序前的顺序为:);插入元素插入元素 代码接上页代码接上页for (int i = 0; i Li.Count; i+) Console.Write(0,-8 , Lii); if (i+1) % 5 = 0) Console.WriteLine();Li.Insert(0,hehe);Console.WriteLine();Console.WriteLine(插入后的顺序为:插入后的顺序为:);for (int i = 0; i Li.Count; i+) Console.Write(0,-8 , Lii); if (i +1)%
20、 5 = 0) Console.WriteLine();Console.Read();删除元素对于对于ArrayList类的实例不再需要的元素,可以类的实例不再需要的元素,可以通过通过Remove和和RemoveAt删除。删除。示例:示例:static void Main(string args) ArrayList Li = new ArrayList(); string arr = new string wo, men, shi, peng, nihao ; Li.Add(a); Li.Add(nihao); Li.Add(1); Li.AddRange(arr); Li.Add(21);
21、 Console.WriteLine(排序前的顺序为:排序前的顺序为:);删除元素删除元素代码接上页代码接上页for (int i = 0; i Li.Count; i+) Console.Write(0,-8 , Lii); if (i+1) % 5 = 0) Console.WriteLine(); Li.Remove(nihao); Console.WriteLine(); Console.WriteLine(排序后的顺序为:排序后的顺序为:); for (int i = 0; i Li.Count; i+) Console.Write(0,-8 , Lii); if (i + 1) %
22、 5 = 0) Console.WriteLine(); Console.Read();元素的排序 Sort方法用于排序。方法用于排序。 示例:示例:static void Main(string args) ArrayList Li = new ArrayList(); string arr = new string wo, men, shi, peng, you ; Li.Add(a); Li.Add(nihao); Li.Add(1); Li.AddRange(arr); Li.Add(21); Console.WriteLine(排序前的顺序为:排序前的顺序为:);元素排序元素排序代码
23、接上页代码接上页 for (int i = 0; i Li.Count; i+) Console.Write(0,-8 , Lii); if (i+1) % 5 = 0) Console.WriteLine(); Li.Sort(); Console.WriteLine(); Console.WriteLine(排序后的顺序为:排序后的顺序为:); for (int i = 0; i Li.Count; i+) Console.Write(0,-8 , Lii); if (i + 1) % 5 = 0) Console.WriteLine(); Console.Read(); 6.5.2 哈希
24、表哈希表是按照链表的形式进行存储的,不哈希表是按照链表的形式进行存储的,不需要顺序排列,而需要顺序排列,而ArrayList类是按照顺序类是按照顺序进行排列的。对于链表存储的结构,需要进行排列的。对于链表存储的结构,需要通过索引进行访问。通过索引进行访问。常用属性:常用属性:Count,Keys,Values。常用方法:常用方法:Add、Remove、Clear、ContainKey、ContainValue 6.5.2 哈希表示例:示例:static void Main(string args) Hashtable ht = new Hashtable(); ht.Add(001,numbe
25、r); ht.Add (002,grade); ht.Add(003, name); Console.WriteLine(输出输出ht的键的键/值的对数为:值的对数为:0,ht.Count ); Console.WriteLine(请输入要查找的键:请输入要查找的键:); string a = Console.ReadLine(); if (ht.ContainKey(a) Console.WriteLine(找到键找到键0所对应的值所对应的值1, a, hta); else Console.WriteLine(在在ht中没有找到要查找的键中没有找到要查找的键0,a); ht.Remove(0
26、03);6.5.2 哈希表代码接上页代码接上页static void Main(string args) Hashtable ht = new Hashtable(); ht.Add(001,number); ht.Add (002,grade); ht.Add(003, name); Console.WriteLine(输出输出ht的键的键/值的对数为:值的对数为:0,ht.Count ); Console.WriteLine(请输入要查找的键:请输入要查找的键:); string a = Console.ReadLine(); if (ht.ContainKey(a) Console.Wr
27、iteLine(找到键找到键0所对应的值所对应的值1, a, hta); else Console.WriteLine(在在ht中没有找到要查找的键中没有找到要查找的键0,a); ht.Remove(003);遍历哈希表遍历哈希表遍历哈希表通过遍历哈希表通过foreach语句来实现,有两语句来实现,有两种方式。一种是使用种方式。一种是使用DictionaryEntry结构结构体访问体访问Hashtable中的元素;另一种就是使中的元素;另一种就是使用普通的类型作为只读变量,通过键的下用普通的类型作为只读变量,通过键的下标来访问。标来访问。 遍历哈希表遍历哈希表使用使用DirectonaryEn
28、try遍历哈希表遍历哈希表 示例:示例:static void Main(string args) Hashtable ht = new Hashtable(); ht.Add(001,number); ht.Add (002,grade); ht.Add(003, name); ht.Add(004,age); ht.Add(005, sex); Console.WriteLine(输出输出ht的键的键/值的对数为:值的对数为:0,ht.Count ); foreach (DictionaryEntry de in ht) Console.Write(0,-4,de.Key); Consol
29、e.Write(0,-4,de.Value); Console.WriteLine(); Console .ReadLine ();遍历哈希表遍历哈希表 通过键的下标遍历哈希表通过键的下标遍历哈希表 示例:示例:static void Main(string args) Hashtable sh = new Hashtable(); sh.Add(001, str1); sh.Add(002, str2); sh.Add(003, str3); Console.WriteLine(code string ); foreach (string s in sh.Keys) Console.Writ
30、eLine(s + + shs); Console.Read(); 6.5.3 哈希表的排序示例:示例:static void Main(string args) Hashtable ht = new Hashtable(); ht.Add(001,number); ht.Add (002,grade); ht.Add(003, name); ht.Add(004,age); ht.Add(005, sex); Console.WriteLine(输出输出ht的键的键/值的对数为:值的对数为:0,ht.Count ); ArrayList akeys=new ArrayList(ht.Keys
31、); akeys.Sort(); foreach (string skey in akeys) Console.Write(skey + :); Console.WriteLine(htskey); Console .ReadLine (); 6.6 小结小结本章分别详细介绍了一维数组、多维数组本章分别详细介绍了一维数组、多维数组和交错数组的创建、初始化以及遍历等。和交错数组的创建、初始化以及遍历等。对于对于C#中的数组,必须明确指出其大小,中的数组,必须明确指出其大小,当一个数组实例被创建时,每一维的标号当一个数组实例被创建时,每一维的标号和长度就被建立了。接着介绍了和长度就被建立了。接着介绍了ArrayList类,该类可以按照需求动态增加空间容量,类,该类可以按照需求动态增加空间容量,而且每次都是以当前空间而且每次都是以当前空间2的倍进行扩展。的倍进行扩展。最后,由于最后,由于ArrayList每次操作都要涉及大每次操作都要涉及大量数据的移动,不适宜进行频繁插入操作,量数据的移动,不适宜进行频繁插入操作,所以提出了在内存中以链表形式存储的所以提出了在内存中以链表形式存储的Hashtable,并介绍了相关使用方法。,并介绍了相关使用方法。
限制150内