数据结构——数组

这篇具有很好参考价值的文章主要介绍了数据结构——数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组

数据结构的基本类型之一,它可以构成其他数据结构,如栈、队列、哈希表、树、图、堆、矩阵、张量。
数组在内存中的存储方式为一片连续的内存空间,其基本操作与其他数据结构一致,即所谓的增删改查。废话不多说,上代码加以理解。

Java类型实现

class array {

  public static void main(String[] args) {    

      // 初始化数组
      Scanner in = new Scanner(System.in);
      int[] arr = new int [5];
      int[] nums = {1,3,2,5,4};

      System.out.println("访问的随机元素是:"+randomAccess(nums));


      System.out.print("输入要插入的索引和元素:");
      int index = in.nextInt();
      int n = in.nextInt();
      insert(nums,n,index);
      System.out.println("现在的nums数组为:");
      for (int i = 0; i < nums.length; i++) {
          System.out.print(nums[i]);
      }
      System.out.println();

      System.out.print("输入要删除的索引和元素:");
      index = in.nextInt();
      n = in.nextInt();
      delete(nums,n,index);
      System.out.println("现在的nums数组为:");
      for (int i = 0; i < nums.length; i++) {
          System.out.print(nums[i]);
      }
     // foreach遍历方式
     // for (int num: nums) {
     //   System.out.println(num);
     // }
      System.out.println();

      //查找元素
      System.out.println("请输入要查找的元素:");
      n = in.nextInt();
      System.out.println("查找的元素的下标为:"+find(nums,n));

      //扩展数组
      System.out.println("请输入扩展的大小:");
      n = in.nextInt();
      int[] a = extend(nums,n);
      System.out.println("新数组为:");
      for (int b:a) {
          System.out.print(b);
      }

  }
  //访问元素,在数组中随机抽取一个数
  public static int randomAccess(int[] nums){
      int randomIndex = ThreadLocalRandom.current().nextInt(0, nums.length);
      int randomNum = nums[randomIndex];
      return randomNum;
  }

  //插入元素
  public static void insert(int[] nums,int num,int index){
      for (int i = nums.length-1; i > index ; i--) {
          nums[i] = nums[i-1];
      }
      nums[index] = num;
  }

  //删除元素
  public static void delete(int[] nums,int num,int index){
      if (index == nums.length-1){
          nums[index] = 0;
          return ;
      }
      for (int i = index; i < nums.length - 1; i++) {
          nums[i] = nums[i+1];
      }
  }

  //查找元素,返回索引
  public static int find(int[] nums,int num){
      for (int i = 0 ; i < nums.length ; i++ ) {
          if (nums[i] == num) {
              return  i;
          }
      }
      return -1;
  }

  //扩展数组:思路——新建一个更大的数组,将原数组复制到新数组中
  public static int[] extend(int[] nums,int enlarge){
      int[] newArr = new int[nums.length+enlarge];
      for (int i = 0; i < nums.length; i++) {
          newArr[i] = nums[i];
      }
      return newArr;
  }
}

数组的优点与局限性:

    ·空间效率高:数组为数据分配了连续的内存块,无需额外的结构开销
    ·支持随机访问:允许在O(1)时间内访问任何元素
    ·缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速度

连续空间存储的局限性:

    ·插入与删除效率低:但数据量大时,该操作会移动大量数据
    ·长度不可变:数组在初始化后长度就固定了,扩容数组需要将所有数据复制到新数组,开销很大
    ·空间浪费:如果数组分配的空间大小超过实际所需,那么多余的空间就被浪费了

数组典型应用:

·随机访问
·排序和搜索
·查找表
·机器学习
·数据结构实现

本篇内容参考自Github krahets的hello算法,将其内容进行归纳整理

文章来源地址https://www.toymoban.com/news/detail-825277.html

到了这里,关于数据结构——数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包