典例学C#之语法基础(二)数组与集合

文章目录

  • 1.存储多个学生姓名——一维数组
  • 2.生成学生成绩单——创建二维数组
  • 3.计算两个矩阵乘法——二维数组运算
  • 4.按月存储日期——交错数组
  • 5.生成学生信息表——ArrayList的使用
  • 6.管理学生信息——List的使用
  • 7.生成省市信息表——Dictionary的使用
  • 8.模拟舞伴配对问题——Queue的使用
  • 9.括号匹配监测——Stack的使用

本文配合上一篇文章数据结构进阶学习更好
C#提供的 数据类型和一些 集合类型来为这些数据提供存储的空间和一定的存储结构。
这些类型不但为这些 大批量的数据提供了方便快捷的访问方式,而且还提供了对数据的添加、访问、修改等操作
本文通过 典型例题,首先介绍 一维数组二维数组以及 交错数组对数据的存储、访问、修改等操作,然后介绍 链表 (ArrayList与List)字典Dictionary队列Queue栈Stack等具有特定数据结构的集合类型,最后将这些集合类型应用到实际的算法中。

1.存储多个学生姓名——一维数组

描述:介绍一维数组的创建和初始化方法,将一组学生姓名存储到一维数组中,并对其中的姓名进行修改,最后从控制台输出学生姓名,效果如图
典例学C#之语法基础(二)数组与集合_第1张图片

实现过程:
典例学C#之语法基础(二)数组与集合_第2张图片

解析(1)创建一维数组的语法格式
数组元素类型[ ] 数组名称= new 数组元素类型[元素个数n]{元素0,元素1,…,元素n-1};
花括号{}内的数据为数组元素初始化操作,如果不需要初始化,该操作可以省略。
(2)所有数组类型都是从Object.Array类型派生出来的,该类型提供了Length属性来获取数组的长度。

2.生成学生成绩单——创建二维数组

描述:主要介绍二维数组的创建方法和二维数组的赋值操作。 实例中首先创建了一个存储学生成绩的二维数组,然后随机生成了学生成绩并按学号递增的方式存储到二维数组中,最后输出所有学生的信息。效果如图:
典例学C#之语法基础(二)数组与集合_第3张图片

实现过程:(1)创建二维数组
在这里插入图片描述

(2)为二维数组赋值
典例学C#之语法基础(二)数组与集合_第4张图片

解析:(1)二维数组创建格式
数组元素类型[ , ] 数组名称=new 数组元素类型[行数r,列数c];
矩形数组定义及引用时 注意是[ , ] 不是[ ][ ] 与C语言不同
(2)创建一个随机数生成器
Random random = new Random();
1.random.Next() --------------返回非负的一个随机数 返回类型为Int
2.random.Next(MaxValue)----------返回一个小于所指定最大值的非负随机数
(3)可通过GetLength方法获取二维数组行数和列数传入参数0时获取的是行数传入参数为1时获取的是列数

3.计算两个矩阵乘法——二维数组运算

描述:利用二维数组实现两个矩阵相乘的运算。讲过两个矩阵存储到两个二维数组中,然后讲矩阵相乘的结构存储到第三个数组中。矩阵相乘的运算结果如图
典例学C#之语法基础(二)数组与集合_第5张图片

实现过程:(1)创建两个二维数组并为其赋值(使用随机数生成器)
典例学C#之语法基础(二)数组与集合_第6张图片

典例学C#之语法基础(二)数组与集合_第7张图片

(2)计算两个矩阵的乘积
典例学C#之语法基础(二)数组与集合_第8张图片

解析:本题比较简单,不做过多解析。值得一提的是多维数组其实可以理解为多维向量

4.按月存储日期——交错数组

描述:为了节约内存(在微型计算机上很重要),用矩形数组的话,如果需要存储日期,必须使用一个12行31列的二维数组,但是并不是所有的月份都是31天,所以势必存在存储空间的浪费。交错数组可以按每个月的天数决定元素的个数。按月存储日期效果如图。
典例学C#之语法基础(二)数组与集合_第9张图片

实现过程:(1)从控制台输入年份
在这里插入图片描述

(2)创建名为months的二维交错数组,并确定每月的天数。
典例学C#之语法基础(二)数组与集合_第10张图片

(3)为months赋值,并输出其元素

典例学C#之语法基础(二)数组与集合_第11张图片

解析:本题比较简单,不做深入解析。
交错数组定义的语法格式
元素类型[ ][ ] 数组名称= new 元素类型[行数][ ];
交错数组可以理解为一个元素类型为一维数组的一维数组。

5.生成学生信息表——ArrayList的使用

(1)描述:本例主要介绍元素数量可以按需要动态变化的数组类型ArrayList,首先创建一个存储单个学生信息的结构体,然后利用ArrayList类型对学生信息进行动态添加,最后从控制台输出学生信息表。
典例学C#之语法基础(二)数组与集合_第12张图片

(2)实现:创建存储学生信息的结构体
典例学C#之语法基础(二)数组与集合_第13张图片

(2)创建学生信息表,并向列表中添加学生信息。最后输出
典例学C#之语法基础(二)数组与集合_第14张图片

6.管理学生信息——List的使用

描述:本例介绍泛型集合类型中一种List类型,实例中创建一个结构体存储学生信息,利用List类型存储学生信息表,并对学生信息表进行增添和删除。

典例学C#之语法基础(二)数组与集合_第15张图片

实现:(1)创建学生结构体
典例学C#之语法基础(二)数组与集合_第16张图片

(2)创建学生列表,并输出
典例学C#之语法基础(二)数组与集合_第17张图片

(3)添加和删除学生信息,并在控制台输出更新后的学生信息。
典例学C#之语法基础(二)数组与集合_第18张图片

补充:List类型声明和创建实例的语法格式
List<元素类型> 类型变量=new List<元素类型>();
本例使用了Add,RemoveAt方法增添删除元素,使用Insert方法在指定索引处添加新元素。

7.生成省市信息表——Dictionary的使用

描述:创建中国的省市信息表,省下包含该省的市。用户输入要查询的省,控制台输出该省的城市。
效果如图:
典例学C#之语法基础(二)数组与集合_第19张图片

典例学C#之语法基础(二)数组与集合_第20张图片

实现:(1)使用字典Dictionary类型,创建省份列表。省份名字对应键,省份设置为List类型的城市表
典例学C#之语法基础(二)数组与集合_第21张图片

将各省市添加到省份列表中。
(2)将省市信息输出
典例学C#之语法基础(二)数组与集合_第22张图片

Dictionary类型中的元素包含了键和值,所以既不是键也不是值, 元素类型 KeyValuePair
(3)查询指定省份的信息
典例学C#之语法基础(二)数组与集合_第23张图片

ContainsKey(Key) 方法判断 表中是否有所要查询的键。

8.模拟舞伴配对问题——Queue的使用

描述:本例主要讲解具体队列结构的泛型类型Queue的使用方法。
模拟舞伴配对
为例。在舞会上,男士和女士各排成一队,组成两队等待跳舞的队伍。当舞曲开始的时候,男女两支等待队伍从头部开始各出一名男士、女士结成舞伴直到一支队伍全部配对无一人剩下为止。剩下未配对的队人留在等待队伍中,下次舞曲先参与配对。舞曲完成后,跳舞的队伍回到等待队伍的末尾等待下一轮舞曲的开始。
队列结构的特点是先进队的元素先出队,后进队的元素后出队。因此**,队列中的元素从队列尾部进入,从头部取出。**
典例学C#之语法基础(二)数组与集合_第24张图片

典例学C#之语法基础(二)数组与集合_第25张图片

实现:(1)初始化男士和女士等待队列。

典例学C#之语法基础(二)数组与集合_第26张图片

(2)男士女士进入等待队列
典例学C#之语法基础(二)数组与集合_第27张图片

Queue类型的Enqueue方法****将一个元素添加到队列尾部。Queue类型的元素增加一个
Queue类型的Dequeue方法从队列的头部取出一个元素。Queue类型的元素减少一个
Count属性值为Queue元素数量 相当于数组中的Length
(3)第n首舞曲开始,男女舞伴配对
典例学C#之语法基础(二)数组与集合_第28张图片

典例学C#之语法基础(二)数组与集合_第29张图片

(4)舞曲结束
典例学C#之语法基础(二)数组与集合_第30张图片

9.括号匹配监测——Stack的使用

描述:本例介绍具有栈结构的泛型集合类型Stack的使用,实例从控制台输入一个括号表达式,然后检测括号表达式中的括号匹配是否正确。
栈结构的特点是先进栈的元素后出栈,后进栈的元素先出栈。因此栈中元素的进出都发生在栈顶
典例学C#之语法基础(二)数组与集合_第31张图片

典例学C#之语法基础(二)数组与集合_第32张图片

实现:(1)从控制台输入括号表达式。在main函数中添加代码
在这里插入图片描述

(2)遍历括号表达式,检测括号匹配是否正确
典例学C#之语法基础(二)数组与集合_第33张图片

括号匹配检测的算法思想是遍历括号表达式的字符,如遇到正括号’[’ ‘(’ ‘{’,将其进栈(Push方法),
继续遍历遇到反括号,将栈顶的正括号取出(Pop方法)与其匹配,若不匹配则说明括号匹配错误(一个反括号总是与其前面的最近的正括号配对,用进栈出栈恰好可以描述 最近)
括号不匹配有三种可能 ①正反括号数目一样,但是不匹配
②正括号更多 ③反括号更多

你可能感兴趣的:(C#陪伴学习,队列,数据结构,c#)