首页 > 其他分享 >数据结构之——数组

数据结构之——数组

时间:2024-02-04 23:46:09浏览次数:23  
标签:index nums int System 数组 数据结构 out

数组

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

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算法,将其内容进行归纳整理

标签:index,nums,int,System,数组,数据结构,out
From: https://www.cnblogs.com/dytydykyjy666666/p/18007231

相关文章

  • 乘积小于k的子数组
    问题描述:给定一个正整数数组nums。找出该数组内乘积小于k的连续的子数组的个数。示例1:输入:nums=[10,5,2,6],k=100输出:8解释:8个乘积小于100的子数组分别为:[10],[5],[2],[6],[10,5],[5,2],[2,6],[5,2,6]。需要注意的是[10,5,2]并不是乘积小于100的......
  • 长度最小的子数组
    问题描述:给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回0。示例:输入:s=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的连续子数组。进阶:如果你......
  • redis有5种数据结构
    redis有5种数据结构,分别如下:5种数据结构python语言对5种数据结构的增删改查全局函数1|0redis连接importredispool=redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)r=redis.Redis(connection_pool=pool)redis取出的结果默认是字节,可......
  • js 数组和对象的深拷贝的方法
    数组深拷贝的方法方法一:for循环实现vararr=[1,2,3,4,5]vararr2=copyArr(arr)functioncopyArr(arr){letres=[]for(leti=0;i<arr.length;i++){res.push(arr[i])}returnres} 方法二:slice方法原理也比较好理解,他是将原数......
  • 树状数组
    树状数组总结前言树状数组是数据结构中的一股清流,代码简洁,思路清晰,又好理解qwq。前置芝士lowbit:https://www.cnblogs.com/zhouruoheng/p/18003331简介树状数组是一种基于lowbit的用于维护\(n\)个数前缀和信息的数据结构。支持:快速求前缀和,复杂度为\(O(\log{n})\)。......
  • 寻找两个有序数组的中位数(4)
    4MedianofTwoSortedArrays问题描述:给定两个大小为m和n的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m+n))。你可以假设nums1和nums2不会同时为空。示例1:nums1=[1,3]nums2=[2]则中位数是2.0示例2:n......
  • 两数之和-输出有序数组
    167TwoSumII-Inputarrayissorted问题描述:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值index1和index2,其中index1必须小于index2。说明:返回的下标值(index1和index2)不是从零开始的。你可以假设每个输入......
  • 合并两个有序数组
    88.合并两个有序数组问题描述:给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。示例:输......
  • Python数据结构与算法06——树与树算法
    二叉树classNode(object):def__init__(self,val,lchild=None,rchild=None):self.val=valself.lchild=lchildself.rchild=rchildclassTree(object):def__init__(self):self.root=Nonedefadd(self,item):no......
  • [数据结构] 链表
    写在前面菜鸡博主开始复习了,先从数据结构开始吧(其实是每天复习高数太累了)1.单链表单链表是线性表的链式存储,是指通过一组任意的存储单元来存储线性表中的数据元素。对每个链表节点,除了存放元素自身的信息之外,还需要存放一个指向其后继的指针(如下图所示)单链表的节点可以用如......