c#学习笔记-----数组、集合

1.0 概述

  数组和集合是非常重要的数据结构(严格意义上集合好像不是基本的数据结构,我当初学的是严蔚敏版的c语言版本的数据结构(考研必备书籍),这本书没有把集合列为最基本的数据结构。),想必只有考过 计算机专业基础综合(专业代码:408)的人都知道数组不是一个很好玩的东西,我记得那个什么KMP算法就是练习数组的一个很好的例子!再过20多天,又不知道有多少人要死在 计算机专业基础综合这个大坑里!哈哈^_^!

    fhbds!

1.1 数组声明

     数组实际上是由一个变量名称表示一组同一类型的元素,是一种弱键值对关系!有了数组之后,对于批量操作一些同一类型的数据有很大的帮助,比如说你玩的三国杀,斗地主,你手里拿的就是一个数组或者集合!c#中数组有点风骚,不像Java中那样简单!c#中有矩形数组,还有交错数组!数组在使用之前需要声明和初始化!

  矩形数组声明和初始化:

 1  //声明数组
 2            int [ ] array1;//声明一个一维数组
 3            string[ , ] array2; //声明一个二维数组  (Java中这样声明是完全错误的!)
 4            // string [2,3] array3;//编译报错
 5 
 6             //初始化数组的方式
 7             int [] array3 = new int[4];
 8             string [] array4 = {"","","",""};
 9             string [] array5 = new string[4] { "", "", "", "" };//显式
10 
11             string [,] array6=new string [3,4];  //3x4
12             int[,] array7 = new int[,] { {1,2 }, {3,4 }, {5,6} };  //3x2
13             int[,] array8 = { { 7, 8,9}, { 10, 11, 12}, { 13, 14 ,15} };//子数组长度有限制,所有才有交错数组
14              
15             //赋值
16             array3[0] = 1;
17             int i = array3[0];
18             array6[2, 3] = "数组";
19             string str = array6[2, 3];
20 
21             //textBox1.Text = i.ToString();
22             //textBox1.Text =str;

  交错数组声明初始化:

1    //交错数组(数组的数组)
2             int[][] jAarry1 = new int[3][];//jAarry1是3个int数组的 数组
3 
4             jAarry1[0] = new int[] {1,2};
5             jAarry1[1] = new int[] { 4,5,6 };
6             jAarry1[2] = new int[] {7,8,9};

     矩形数组和交错数组的区别:

 

1.2 数组的操作

  数组是system.Array命名空间下的,比较完备的属性和功能如下,一些功能都是通过这些最基本的属性和封装好的方法来实现的(Java中叫API)。

  数组的基本操作无外乎遍历,排序和查找!这三个操作就能实现很多的功能!

  矩形数组的遍历:既可以用for来遍历(需要用到index的时候 use this ),也可以用foreach(只看数组中的元素),也可以直接Array.sort()。这些Java都支持(foreach 结构不是这样的),最近听说Java新出了一个非常牛X的方式来数组!

 1     //数组遍历
 2 
 3             //一维矩形数组
 4             for (int k = 0; k < array4.Length;k++ ) {
 5               //  textBox1.Text += array4[k].ToString();
 6             }
 7 
 8             foreach( var v in array4 ){
 9                 //textBox1.Text += v.ToString();
10             }
11 
12             //多维矩形数组
13             for (int a = 0; a < array7.GetLength(0); a++)
14             {
15                 for (int b = 0; b < array7.GetLength(1); b++)
16                 {
17                     //textBox1.Text += array7[a, b] + "  ,";
18                 }
19             }
20 
21             foreach (var v1 in array8)
22             {
23                // textBox1.Text += v1.ToString()+" ,";
24             }

  交错数组的遍历:

 1   //交错数组
 2             for (int i1 = 0; i1 < jAarry1.Length;i1++ ) {
 3                 for (int j1 = 0; j1 < jAarry1[i1].Length;j1++ ) {
 4                  //   textBox1.Text += jAarry1[i1][j1].ToString()+"  ,";
 5                 }
 6             }
 7 
 8             foreach (var v2 in jAarry1)
 9             {
10                 foreach (var v22 in v2) {
11                     //textBox1.Text += v22.ToString()+"   ,";
12                 }
13             }
14             

  数组排序的方式有很多种,也可以基于数据结构中的希尔排序,选择排序,快速排序,基数排序.............,这些排序会在算法时空复杂度上,稳定性,实现上都各有差异,其中冒泡排序是最常使用的一种,冒泡排序是基于选择排序思想的!

 1    //数组排序(冒泡排序)
 2             int [] arr ={5,2,0,1,3,1,4,7,7};
 3             int temp;
 4             for (int m = 0; m < arr.Length-1; m ++ ) {
 5                 for (int n = 0; n < arr.Length - m - 1;n++ )
 6                 {
 7                     if (arr[n] > arr[n + 1])
 8                     {
 9                         //temp = arr[n];
10                         //arr[n] = arr[n + 1];
11                         //arr[n + 1] = temp;
12                         arr[n] = arr[n] ^ arr[n + 1];
13                         arr[n+1] = arr[n] ^ arr[n + 1];
14                         arr[n] = arr[n] ^ arr[n + 1];
15                     }
16                 }
17             }
18             
19            foreach( var  vv in arr ){
20             //   textBox1.Text += vv.ToString()+"   ,";
21            }

  其中使用^运算符会高效点!对于多维数组的排序一般是基于按行或者按列排序,实现价值不太大!

  数组查找是一个非常重要的功能!查找,数据结构也有相应的算法,比较简单的就是顺序查找和折半查找,其中折半查找效率明显高于顺序查找!Java中也是这么去实现的!可以说一维矩形数组Java和c#是非常类似的!

 1           //顺序查找
 2 
 3            int num = 7;
 4            int index = -2;
 5            for (int ii = 0; ii < arr.Length; ii++)
 6            {
 7                if (arr[ii] == num)
 8                {
 9                    //存在 索引值保存下来
10                    index = ii;
11                    break;
12                }
13            }
14            textBox1.Text += (index + 1).ToString() + "   ,";
15 
16            //折半查找
17            int low = 0;//头指针
18            int high = arr.Length - 1;//尾指针
19            int index = -2;
20            int number = 10;
21            while (low <= high)
22            {
23                int mid = (low + high) / 2;
24                if (number > arr[mid])
25                {
26                    low = mid + 1;
27                }
28                else if (number < arr[mid])
29                {
30                    high = mid - 1;
31                }
32                else
33                {
34                    index = mid;
35                    break;
36                }
37            }
38 
39             textBox1.Text += (index+1).ToString() + "   ,";

 

2.1 集合

<  not end  >

posted @ 2017-11-29 20:26  无心无信  阅读(284)  评论(0编辑  收藏  举报