zoukankan      html  css  js  c++  java
  • C#数组的学习笔记

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Project4
    {
        class Program
        {
            static void Main(string[] args)
            {
                //主程序入口
                //数组空间的定义方法
                //int[] arr = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
                int[] arr = { 10, 32, 42, 55, 77, 3, 89, 13, 11, 100 };
                //数组翻转
                // reversed(arr);       
                //指定位置加入指定值     
                //insert(arr, 0, 1111);
                //指定数组删除指定值
                //deleteValue(arr, 115);
                deleteValue2(arr,77);
                //删除指定下标的元素
                //deletespecificSUB(arr, 0);
                                        //加入一个数组
                                        //int[] brr = {11,11,11,99};
                                        //insertArrdataTo(arr,2,brr);
                //指定数值替换
                //replace(arr, 77, 44);
                //Console.WriteLine(indexof(arr,11));
                // Console.WriteLine(lastIndexof(arr, 400));
                                         //从小到大排列
                                         // fromMintoMax(arr);
                                         //删除,指定位置到指定位置的值
                                           //deletekinddata(arr,0,2);
                                           // deletekinddata2(arr, 0, 2);//调用
                //  删除,指定位置指定长的元素
                //deletecountdata(arr,0,2);
                arrshow(arr);//经过上述变化,数组会变化
                Console.ReadKey();//Console.ReadLine();
    
            }
            /// <summary>
            /// 数组逆转
            /// </summary>
            /// <param name="arr">从外部传给的数组</param>
            static void reversed(int[] arr)
            {
                //int i = (int)(arr.Length / 2);
                //在数组中进行运算时,需要运算的次数:总长度的一半
                for (int a = 0; a < arr.Length / 2; a++)
                {
                    //借鉴于冒泡和选择法。即:选用一个中间变量,做临时的空间。
                    int t;
                    //将数组中倒数第一个(倒数第二个......)赋值给t。
                    t = arr[arr.Length - 1 - a];
                    //将对应的前半部分的值赋值给后部
                    arr[arr.Length - 1 - a] = arr[a];
                    //此时,地址名t内存的是对应的后部分值,赋值
                    arr[a] = t;
                }           
            }
            /// <summary>
            /// 在数组指定位置处插入一个指定的值
            /// </summary>由于数组长度不能改变,所以当值插入后,把后一个值覆盖掉
            /// <param name="arr">传入的数组</param>
            /// <param name="index">要插入的位置</param>
            /// <param name="value">加入的数值</param>
            static void insert(int[] arr,int index,int  value)
              //static void insert(int[] arr, index, value)错误地方:index value没有定义类型
            {
                //使用循环,倒叙方法
                  for(int i =arr.Length-1; i> index; i--)
                {
                    //直接使用前面的数覆盖后边的值)
                    arr[i] = arr[i - 1];
                }     
                  //赋值,将要给的值赋予index位置       
                arr[index] = value;            
            }
            /// <summary>
            /// 删除数组中指定的值,变量自定义        
            /// </summary>由于数组长度不能改变,册除一个值后
            /// 将后面所以值往前移,最后一个值改为0
            /// <param name="arr"> </param>
            /// <param name="value"> </param>
            static void deleteValue(int[] arr, int value)
            {
                //循环整个数组
                for (int i = 0; i <= arr.Length-1; i++)
                {
                    //在数组中找到指定数值
                    if (arr[i] == value)
                    {
                        //从当前位置开始,用后一个值覆盖前一个
                        for (int j = i; j < arr.Length - 1; j++)
                        {
                            arr[j] = arr[j + 1];
                        }
                    }
                    //另一种方法,利用indexof。
                    else
                    {
                        //Console.WriteLine("删除失败,未找到!");
                        return;
                    }
    
    
                }
                //数组末尾赋值0
                arr[arr.Length - 1] = 0;
            }
            //可以调用:
            static void deleteValue2(int[] arr, int value)
            {
                //定义一个变量,存储或许的下标
                int index = indexof(arr, value);            
                //删除改下标的值。为什么是index,而不是index++:因为,删除之后,index后边的一个值,就向前了一个格
                deletespecificSUB(arr, index);
            }
    
            /// <summary>
            /// 删除数组中指定下标的值,变量自定义
            /// </summary>
            /// <param name="arr"></param>
            /// <param name="index"></param>
            static void deletespecificSUB(int[] arr, int index)
            {
                //遍寻数组
                for(int i = 0;i <= arr.Length - 1; i++)
                {
                    //判断下标
                    if(i == index)
                    {    
                        //从该处遍寻数组         
                        for(int j =i;j< arr.Length - 1; j++)
                        {
                            //用后一个值覆盖前一个值
                            arr[j] = arr[j + 1];
                        }
                    }
                }
                //最后一个赋0
                arr[arr.Length - 1] = 0;
            }
            /// <summary>
            /// 在数组指定位置处,插入另一个数组的值
            /// </summary>被插入的数组,此数组的长度一定要小于arr的长度
            /// <param name="arr"> </param>
            /// <param name="index">为插入的开始下标</param>
            static void insertArrdataTo(int[] arr,  int index,int [] brr)
            {
                //加限制条件if,覆盖问题。建立一个新的数组
                //数组一和数组二的总长度小于数组一的长时
                //先挪后运算
                
                for(int i = index; i< index+brr.Length; i++)
                {
                    
                    //当要插入的数组元素和原数组元素的和长度大于原数组长
                    
                        //将原数组元素向后移动
                        arr[i + brr.Length] = arr[i];//wu  
                        //arr[i] = arr[i - brr.Length]; 
                        //填入数据  
                          
                    
                }
                //wang:循环 放入数值。还要考虑插入的个数 
                for (int j = 0; j < brr.Length&&index<arr.Length; j++,index++)
                { 
                    arr[index] = brr[j];
                }
                   
            }
            /// <summary>
            /// 把数组中的指定的值,换成指定的值
            /// </summary>
            /// <param name="arr"> 数组</param>
            /// <param name="oldValue">要替换的数</param>
            /// <param name="newValue">给予的数值</param>
            static void replace(int[] arr, int oldValue, int newValue)
            {
                //遍寻数组中的所有元素
               for(int i =0; i < arr.Length; i++)
                {
                    //寻找
                    if(arr[i] == oldValue)
                    {
                        //在该处做替换
                        arr[i] = newValue;
                    }
                }
            }
            /// <summary>
            ///  返回数组总指定的值第一次出现的位置
            /// </summary>
            /// <param name="arr"> </param>
            /// <param name="value"> </param>
            /// <returns></returns>     
            static int indexof(int[] arr,int value)
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    //当if else后边仅一条语句时,可不用括号
                    //如果查到与外部给的数值相等的数,那么返回该下标
                    if (arr[i] == value)   return i;                
                }
                //若查询不到,返回-1;
                    return -1;              
            }
            /// <summary>
            /// 返回数组中指定的值,最后一次出现的位置
            /// </summary>
            /// <param name="arr"></param>
            /// <param name="value"></param>
            static int lastIndexof(int[] arr,int  value)
            {
                //用逆序的思想,倒数的第一个,为正的最后一个
                for(int i = arr.Length - 1; i >= 0; i--)
                {
                    if(arr[i] == value)
                    {
                        //函数执行到这里直接返回了
                        return i;
                    }
                }
                //因为数组中的下标是从0开始。
                return -1;//返回任何一个正整数均不合理       
            }
            /// <summary>
            /// 数组元素,由小到大排列
            /// </summary>
            /// <param name="arr"></param>
            static void fromMintoMax(int[] arr)
            { 
                //交换次数:应是两次循环 遍布
                for (int i = 1; i < arr.Length - 1; i++)
                { 
                    for (int j = 0; j < arr.Length - i; j++)
                    {
                        int t;
                        if (arr[j] > arr[j + 1])
                        {
                            t = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = t;
                        }
                    }
                }
     
            } 
            /// <summary>
            /// 删除数组中指定的某一段值,从指定下标删除到指定的下标
            /// </summary>
            /// <param name="arr"></param>
            /// <param name="sIndex">开始删除的起始位置</param>
            /// <param name="eIndex">删除的结束位置,但不包括结束位置的值</param>
            static void deletekinddata(int[] arr,int sIndex,int eIndex)
            {
                //最后一位不包括,所以是eIndex > arr.Length。判断
                if (sIndex < 0 || eIndex > arr.Length) return;
                int temp = sIndex;
                for (int j = eIndex; j < arr.Length; j++)
                {
                    arr[temp] = arr[j];
                    //arr[sIndex] = arr[j];sIndex的值并没有发生变化
                    temp++;
                    // sIndex++;若直接使用,则其值发生变化,赋值循环无法正常使用
                }
                //判断清零的个数,进而赋值为零。
                for (int x=arr.Length-1;x>= arr.Length-(eIndex-sIndex); x--)
                {
                    arr[x] = 0;
                }
            }
            /// <summary>
            /// 末尾的元素依然删除了。
            /// </summary>
            /// <param name="arr"></param>
            /// <param name="sIndex"></param>
            /// <param name="eIndex"></param>
            static void deletekinddata2(int[] arr, int sIndex, int eIndex)
            {
                if (eIndex < 0 || sIndex > arr.Length) return;
                //i :表示要删除的个数
                for(int i = 0;i< eIndex-sIndex;i++)
                {
                    //deletespecificSUB:删除指定下标;删除一个数之后,数组中的数值会向前移动一格。
                    //那么删除的位置应该是sIndex
                    deletespecificSUB(arr, sIndex);
                }
            }
    
    
    
            /// <summary>
            /// 删除数组中指定个数的值,从指定位置删除,往后删除指定的个数
            /// </summary>
            /// <param name="arr"></param>
            /// <param name="sIndex">删除的起始位置</param>
            /// <param name="Length">总共要删除多少个,不包括最后一位</param>
            static void deletecountdata(int[]arr,int sIndex, int Length)
            {
                for(int i =0; i < arr.Length; i++)
                {
                     for(int j=sIndex + Length - 1;j >= sIndex;j--)
                    {
                        //arr[j] = 0;
                        for(int x= sIndex + Length - 1;x< arr.Length-1; x++)
                        {
                            int t;
                            t= arr[x + 1];
                            arr[x + 1] = arr[x];
                            arr[x] = t;
                        }
                    }
                     
                  
                }
                for(int y = arr.Length - 1; y >= arr.Length - Length; y--)
                {
                    arr[y] = 0;
                }
            }         
            //显示数组中的所有的元素
            static void arrshow(int[] arr)       //  传入参数时,定义类型
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    Console.Write(arr[i] + " ");
                }  
            }
             
        }
    }
    

      

  • 相关阅读:
    一起学Python:协程
    一起学Python:字符串介绍
    一起学Python:列表介绍
    一起学Python:字典介绍
    一起学Python:元组
    函数介绍
    函数参数和函数返回值
    CodeForces 680A&680B&680C&680D Round#356
    POJ 3481 set水过
    BZOJ 1037 生日聚会 DP
  • 原文地址:https://www.cnblogs.com/allyh/p/11456430.html
Copyright © 2011-2022 走看看