Com.Java.Basis 第七课 JAVA中的数据结构中的数组(二)

简介: Com.Java.Basis 第七课 JAVA中的数据结构中的数组(二)

表示方法

编辑 播报

数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标] 其中的下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。


赋值方法

编辑 播报

初始化赋值的一般形式为:static类型说明符数组名[常量表达式]={值,值……值}; 其中static表示是静态存储类型, C语言规定只有静态存储数组和外部存储数组才可作初始化赋值(有关静态存储,外部存储的概念在第五章中介绍)。


在{ }中的各数据值即为各元素的初值, 各值之间用逗号间隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;


使用规则

编辑 播报

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。


2.数组名的书写规则应符合标识符的书写规定。


3.数组名不能与其它变量名相同。


1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。


2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)


3.若不给可初始化的数组赋初值,则全部元素均为0值。


4.假如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值


数组是相同数据类型的一组数据的集合数组分为一维数组和二维数组

数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一,大多数现代编程语言都内置数组支持。

//声明数组
    int arr[];
    String str[];
    long ser[];
//数组名称 =new 数组元素类型[shuzuyuansugeshu]
    arr =new int [10];
    //数组元素类型 数组名 =new 数组元素类型[shuzuyuansugeshu]
    int month[] =new int [20];
    //初始化的数组  1
    int arrt [] =new int []{12,34,56,78,94};
    //初始化的数组  2
    int arrt2[] ={5645,645,147,89};
int  num [] =new int  []{7,89,7455,551,1522,21559,4222,2225,5441,
    7,89,7455,551,1522,21559,4222,2225,5441,2111};
    for (int k= 0; k < num.length; k++) {
      System.out.print(+k);
    }
    //Eng3
    int  numt[] =new int  []{7,89,7455,551,1522,21559,4222,2225,5441,
        7,89,7455,551,1522,21559,4222,2225,5441,2111};
    for(int h=0;h<=18;h++){
      System.out.print(h);
    }
package 数组;
import java.util.Arrays;
/**
 * 数组是相同类型数据的有序集合。
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
 * @author MZFAITHDREAM
 *
 */
public class DemoTest1 {
  public static void main(String[] args) {
        //变量的类型  变量的名字   =   变量的值
        //数组类型
        int[] nums; //1.定义:声明数组
        int nums2[];//声明数组的第二种方式
//        数组的定义与声明
        nums = new int[10]; //2.创建
        //给数组赋值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;
//        数组的初始化
        int[] a={1,2,3,5,6};//初始化数组a
        System.out.println("数组初始化一");
        System.out.println(Arrays.toString(a));
//        数组初始化二
        int[] b = new int[10];
        b[0] = 10;//动态初始化数组b
        System.out.println("数组初始化二");
        System.out.println(Arrays.toString(b));
//下标合法区间:[0,length-1],如果越界就会报错
        int[] c=new int[2];
        System.out.println(c);
        //计算所有元素的和
         int sum = 0;
        for (int i = 0; i < nums.length; i++) {//nums,length为数组长度
            sum+=nums[i];//通过i索引
        }
        System.out.println("总和为"+sum);//打印结果
//        数组具体的使用 forrach
int[] arrays = {1,2,3,4,5};//创建一个数组
        //没有下标,增强for循环,注意:这里无法修改数组里面内容
        for (int array : arrays) {
          System.out.println("利用增强for循环");
            System.out.println(array);
        }
//        方案二
        System.out.println("方案三打印数组");
        for (int i : arrays) {
          System.out.print(i);
    }
    }
}
//        数组的初始化
        int[] a={1,2,3,5,6};//初始化数组a
        System.out.println("数组初始化一");
        System.out.println(Arrays.toString(a));
package 数组;
import java.util.Arrays;
public class DemoTest2 {
    public static void main(String[] args) {
          int[] arrays = {1,2,3,4,5};
          //打印全部数组元素
          for (int i = 0; i < arrays.length; i++) {
              System.out.print(arrays[i]);
          }
          System.out.println(Arrays.toString(arrays));
          //计算所有元素的和
          int sum =0;
          for (int i = 0; i < arrays.length; i++) {
              sum +=arrays[i];
          }
          System.out.println("sum="+sum);
          //查找最大元素
          int max =arrays[0];
          int min=arrays[0];
          for (int i = 0; i <arrays.length ; i++) {
              if(arrays[i]>max){
                  max = arrays[i];
              } else  if(arrays[i]<min){
                min = arrays[i];
        }
          }
          System.out.println("max="+max);
          System.out.println("min"+min);
          System.out.println("平均值"+sum/5);
          print(arrays);
//          下标地址
          System.out.println(arrays);
          System.out.println(Arrays.toString(arrays));
      }
//    数组作方法入参
    public static void print(int[] a){
          for (int i = 0; i < a.length; i++) {
              System.out.print(a[i]+" ");
          }
          System.out.println();
      }
}
package 数组;
/**
 * 数组的反转
 * @author MZFAITHDREAM
 *
 */
public class DemoTest3 {
   public static void main(String[] args) {
          int[] arrays = {1,2,3,4,5};
          arrays = reverse(arrays);
          for (int array : arrays) {
              System.out.println(array);
          }
      }
      //反转数组方法
      public static int[] reverse(int[] a){
          int[] result = new int[a.length];//返回结果的数组
          for (int i = 0,j=0; i < a.length; i++,j++) {
              result[j] = a[a.length-1-i];
          }
          return result;
      }
}
package 数组;
/**
 * 多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
 * @author MZFAITHDREAM
 *
 */
public class DemoTest4 {
   public static void main(String[] args) {
          //创建一个二维数组
          int[][] array ={{1,2},{2,3},{3,4},{4,5}};
          //打印二维数组
          for (int i = 0; i < array.length; i++) {
              for (int j = 0; j < array[i].length; j++) {
                //根据定义可知,二维数组每一个元素都是一个一维数组,所以这里用array[i].length来表示长度
                  System.out.print(array[i][j]);
              }
          }
   }
}
package 数组;
import java.util.Arrays;
/**
 * 冒泡排序
 * @author MZFAITHDREAM
 *
 */
/**
 * 1.  相邻两个数两两相比,n[i]跟n[j+1]比,如果n[i]>n[j+1],则将连个数进行交换,
2.  j++, 重复以上步骤,第一趟结束后,最大数就会被确定在最后一位,这就是冒泡排序又称大(小)数沉底,
3.  i++,重复以上步骤,直到i=n-1结束,排序完成。
 * @param args
 */
public class DemoTest5 {
/**
 * 当你学了算法又是这么简单
 * @param args
 */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] n = new int[]{100,55,66,77,88};
//  定义一个空的值
        int temp;
        for (int i = 0; i < n.length-1; i++) {
            for (int j = 0; j <n.length-1; j++) {
                if(n[j]>n[j+1]){
                    temp = n[j];
                    n[j] = n[j+1];
                    n[j+1] = temp;
                }
            }
        }
        System.out.println("冒泡排序的思想是两个两个比较大的在后面小的在前面");
        System.out.println(Arrays.toString(n));
        }
      }
package 数组;
//稀疏数组案例
public class DemoTest6 {
    public static void main(String[] args) {
        //创建一个案例中的数组
        int[][] array1 = new int[6][7];
        //赋值有效值
        array1[0][3] = 22;
        array1[0][6] = 15;
        array1[1][1] = 11;
        array1[1][5] = 17;
        array1[2][3] = -6;
        array1[3][5] = 39;
        array1[4][0] = 91;
        array1[5][2] = 28;
        //打印案例数组
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();//换行
        }
        //获取稀疏数组
        int[][] array2 = sparse(array1);
        System.out.println("====================");//分割线
        //打印稀疏数组
        System.out.println("打印稀疏数组:");
        for (int[] ints : array2) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();//换行
        }
        //稀疏数组还原
        System.out.println("==================");//分割线
        int[][] array3 = recovery(array2);
        //打印还原的数组
        System.out.println("打印还原的数组");
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();//换行
        }
    }
    //稀疏数组转换
    public static int[][] sparse(int[][] array){
        //获取数组中有效值个数
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if(array[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值个数:"+sum);
        //创建稀疏数组
        int[][] Sarray = new int[sum+1][3];//因为稀疏数组只有行列值三列,所以后面是3,行为有效个数+1
        //给稀疏数组赋值
        Sarray[0][0] = array.length;
        Sarray[0][1] = array[0].length;
        Sarray[0][2] = sum;
        int count = 0; //计数
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if(array[i][j]!=0){
                    count++;
                    Sarray[count][0] = i;
                    Sarray[count][1] = j;
                    Sarray[count][2] = array[i][j];
                }
            }
        }
        //返回稀疏数组
        return Sarray;
    }
    //稀疏数组还原
    public static int[][] recovery(int[][] Sarray){
        //创建还原后的数组
        int[][] array = new int[Sarray[0][0]][Sarray[0][1]];
        //赋值阶段
        for (int i = 0; i < Sarray.length-1; i++) {
            int x = Sarray[i+1][0];//行
            int y = Sarray[i+1][1];//列
            array[x][y] = Sarray[i+1][2];//值
        }
        return array;//返回
    }
}

感兴趣的可以去下面的文章上了解十大排序有关算法的十种思想


《十大排序算法》让你的思维流动起来。今天的主角又是排序思想你了解多少。每种算法的内容在代码中体现出来。_风雪夜花的博客-CSDN博客

                   

相关文章
|
2月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
48 1
|
2月前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
93 2
|
5天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
25 5
|
19天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
42 5
|
26天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
49 4
|
1月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
47 6
|
1月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
2月前
|
存储 算法 Java
Java 中常用的数据结构
【10月更文挑战第20天】这些数据结构在 Java 编程中都有着广泛的应用,掌握它们的特点和用法对于提高编程能力和解决实际问题非常重要。
31 6
|
2月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
33 4
|
2月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
40 2