• 删除要删除的元素,并将其他元素移到左边以保持所有元素在一起。
  • 如果数组是静态分配的内存,内存不能被删除。当程序终止时,内存被释放。
  • 如果数组是动态分配的内存,额外的内存可以通过使用realloc来删除。
  • 删除一个元素的时间复杂度是O(N)时间。
  • 让我们开始讨论什么是数组,什么是数组的类型以及数组的声明过程。

    阵列的基础和不同的操作

    数组的介绍

    一个数组是一组相关的数据类型,它们用共同的名字来调用,并且都具有相同的类型和大小。一个数组是一个类似数据类型的元素的集合。这个集合是有限的,元素被存储在相邻的内存位置。

  • 数组声明的语法是:-
    数据类型 array_name[size_of_array]。
  • 表示顺序 :-
    1.行为主的顺序 - 数组的行为主的表示顺序是指元素以行的方式存储在数组中的顺序。

    2.2 . 列主要顺序 - 数组的列主要顺序是指元素以列的方式存储在数组中。

    阵列的声明

    数组变量的声明与它们的数据类型的变量相同,只是变量的名字后面有一对方括号[ ],代表数组的每个维度。未初始化的数组必须在方括号内列出其行和列的尺寸。
    在C语言中声明数组时使用的尺寸必须是正积分常数或常数表达式。

    我们可以用不同的方法来声明一个数组。可以通过指定它的类型和大小,或者通过初始化它,或者两者同时进行。

    通过指定大小的数组声明

    int arr1[10]
    

    我们可以声明一个用户指定大小的数组

    int arr2[n]
    

    通过初始化元素进行数组声明

    int arr[] = {10, 20, 30, 40}
    

    编译器创建了一个大小为4的数组

    通过指定大小和初始化元素进行数组声明

    int arr[6] = {10, 20, 30, 40,}
    

    编译器创建了一个大小为6的数组,初始化了用户指定的前4个元素,其余元素为{0,0}。

    数组的类型:-

    数组可以有以下类型:-

  • 静态或(一维)数组。
  • 动态数组或(2D-3D)数组。
  • 静态数组是最常用的数组形式。它是一种大小不能改变的数组类型。静态数组在堆栈中存储它们的值,它们的大小必须在编译时知道。
    它有一个局部范围。因此,它只能在声明它的块中使用。如果静态数组没有被特别初始化,它的元素会被初始化为默认值,对于任何算术类型(int, float, char),默认值为0,对于指针,默认值为NULL。静态数组在程序执行结束前都有其寿命。因此,在一个函数中定义的静态数组在控制权离开该函数时不会被破坏,该数组的值在下次调用该函数时也适用。

    动态数组是一个有巨大改进的数组:自动调整大小。数组的一个障碍是它们是固定大小的。这意味着你需要提前指定你的数组所能容纳的元素数量。一个动态数组会随着我们在其中添加更多的元素而扩展。
    当我们指定一个动态数组时,动态数组的实现会产生一个固定大小的元素数组。由于未使用的内存适用于堆,所以每当运行时提供内存时,都会使用堆数据结构来指定,因为它是自由内存空间的池。在C++中,我们有一个操作符,叫做new,它的返回地址指定在堆中的变量上。

    基本操作:-

    以下是数组支持的基本操作。

    对数组中的每个元素精确处理一次的方法被称为遍历,整个操作被称为遍历。
    在数组中,遍历操作从数组的第一个元素开始,到数组的最后一个元素结束。
    第1步。 [初始化] 设置l = LB。
    第2步。重复步骤3和4,同时l<=UB。
    第3步。 [处理]处理A[l]元素。
    第4步。 [增加计数器]l=l+1 [
    结束步骤2的循环]
    这里,l是计数器变量UB
    - Upper Bond,LB - Lower Bond,A[]是线性阵列。

    插入操作是将一个或多个数据元素插入到一个数组中。根据我们的要求,一个新的元素可以被添加到数组的起始端或任何给定的索引。
    假设数组中有N个元素,我们想在第一个和第二个元素之间插入一个新元素。我们必须将最后一个N-1元素向下移动,以便为新元素创造空间。
    第1步。 [初始化]设置l=N
    第2步。[循环]重复步骤3和步骤4,而l>=P
    第3步。 [向下移动第1个元素]设A[l+1] = A[l]
    第4步。 [减少计数器]设l=l-1 [
    循环结束]
    第5步。[插入元素]设A[P]=X
    第6步。设置N=N+1
    第7步 退出
    这里,P是位置;N是元素的数量;A[]是数组

    这个操作用于从一维数组中的特定位置删除一个元素。
    为了从数组中删除一个元素,我们必须从特定位置删除一个元素,然后将剩余的元素向上移动,以占据被删除元素的空位。
    第1步。 [初始化]设X=A[P]
    第2步。[循环]重复l=P到N-1
    第3步。 [向上移动l+1个元素]设A[P]=X
    [循环结束]
    第4步。 [重置数字N]设N=N-1
    第5步。 退出

    搜索操作是用来找出元素的位置,如果它存在于给定的数据元素集合中。
    假设数组中要搜索的元素是X,那么我们必须从头开始,并且必须将X与每个元素进行比较。这个操作将持续进行,直到找到元素或数组结束。
    SREP 2.
    更新操作是指在给定的索引处更新数组中的一个现有元素。
    基本上,更新操作是在我们想要更新数组中的任何元素时使用。假设我们想更新数组列表中的现有元素,那么在更新操作的帮助下,我们可以很容易地更新列表中现有元素的新值。

    C/C++中的Delete()

    Delete是一个操作符,用于蹂躏由new语句生成的数组和非数组(指针)对象。C语言使用malloc()和calloc()函数在运行时动态地指定内存,并使用free()函数释放动态分配的内存。

    C++支持这些功能,也有一些操作符new和delete,以更好、更容易的方式执行指定和释放内存的任务。

    什么是删除操作符?

    删除一个内存块

    删除整个程序的内存

    只分配原始数据内存

    删除为一个类保留的所有数据。

    解释。删除操作符是新建操作符的反向过程。它取消了为一个对象分配的所有内存。该对象可以是任何类型的。删除操作符完全销毁了一个对象,这样资源就可以用于其他目的。

    删除数组中的一个元素

    从数组中删除元素的详细逻辑步骤:-

  • 移动到你想在给定数组中删除的位置。
  • 将下一个元素复制到数组的当前元素,也就是你需要执行array[i] = array[i + 1]。
  • 重复以上步骤,直到你到达数组的最后一个元素。
  • 最后将数组的大小减少一个。
  • 阵列中的删除操作的算法:-

    考虑LA是一个有N个元素的衬里数组,K是一个正整数,使得K<=N。

  • 设置J=K
  • 重复步骤4和5,同时J<N
  • 设置LA[] =LA[J + 1] 。
  • J=J+1
  • 设置N=N-1
  • 现在,通过这个程序,从数组中删除元素的过程将更加清晰。

    #include<iostream> //_____(1)
    using namespace std; //____(2)
    int main()
      int a[50],x,n,i,j,b[50]; //___(3)
      cout<<"How many elements of array you want to create"; //___(4)
      cin>>n; //___(5)
      cout<<"\nEnter elements of array\n"; //___(6)
      for(i=0,j=0; i<n; ++i) //___(7)
          cin>>a[i]; //____(8)
      cout<<"\Enter element to delete:"; //___(9)
      cin>>x; //___(10)
      for(i=0,j=0;i<n;++i) //___(11)
         if(a[i]!=x) //___(12)
           b[j++]=a[i]; //__(13)
      if(j==n) //__(14)
           cout<<"\nSorry!!!Element is not in the array"; //___(15)
           exit(0);
           cout<<"\nNew array is"; //___(16)
           for(i=0;i<j;i++) //___(17)
              cout<<b[i]<<" "; //_____(18)
      return 0;
    
    How many elements of Array you want to create? 5
    Enter elements of Array
    14 8 3 6 9
    Enter element to delete:6
    New Array is 14 8 3 9
    

    根据这个程序:-
    (1) 它是输入输出流的代表。(
    2) 使用命名空间std意味着你将使用 "std "命名空间的任何类或函数。 (3) 这里
    我们定义了数组列表a-b的大小为[50],在这个阶段我们还需要定义哪些变量。 (4) 这里
    我们要求用户输入。 (5) 这里
    我们让用户提供 "n "的值

    (6) 这里我们再次要求用户输入数组列表。
    (7) 这里我们使用 "For循环",它将从(0到n-1)执行多达n次,
    ++i)意味着在执行特定语句后i的值增加了1。 (8) 这里
    我们把i放在大小为a[50]->i的数组列表中。 (9) 这里我们
    要求用户输入。
    (10) 这里我们让 "x "的值成为用户想要删除的值。 (11) 这里
    我们使用 "For循环",它将从(0到n)执行多达n次,

    ++i)意味着在执行特定语句后i的值增加1。
    (12) 这里我们使用 "IF循环",它在处理完当前语句后才会传递到下一个语句,也就是说,如果要删除的输入值不在列表中,那么该值将增加到下一个值(J++)。 (13) 这里
    增加的值同样添加到数组列表中。
    (14) 这里我们再次使用 "IF循环 "并检查j=n,其中n是用户的输入。 (15) 这里
    如果J不等于n,输出将是,没有用户提供的相同的数组列表,并退出。 (16)
    在使用 "ELSE循环 "后,我们将制定条件,如果J等于n,那么输出将是新的数组,有正确的用户输入。
    (17) 在这里,通过应用 "For循环",我们将删除用户提供的特定值。 (18) 然后,
    输出将是没有用户想要删除的元素的b[50]阵列列表。

    在C++中删除静态分配的数组

    在C++中,一个静态内存分配的数组看起来像。

    int array[100];
    

    这个数组不能被明确地删除,它将在整个程序中存在。这是因为静态内存存在于整个程序中,一旦程序进程终止就会自动删除。

    删除C++中的动态分配数组

    在C++中,一个动态内存分配的数组看起来像。

    int* array = new int[100];
    

    一个动态内存分配的数组可以被删除,因为。

    delete[] array;
    

    如果我们删除一个动态内存分配数组中的特定元素,那么元素的总数就会减少,所以我们可以减少这个数组的总大小。这将涉及到。

    array = (int *)realloc(array, sizeof(int) * (N-1));
    

    这在真正意义上删除了一个元素。

    删除一个数组的时间复杂度

    删除一个元素的时间复杂度是O(N)时间

    这是因为其他元素被移到了被删除元素的位置上。这需要线性时间。如果我们在C++中使用realloc(),实际的内存使用就会减少,但是元素会被移到一个新的位置,所以这是一个开销。

    这是对删除数组过程的详细解释,通过这个程序你可以很容易地从数组中删除元素。通过OpenGenus的这篇文章,你一定对在C++中删除数组或删除数组中的一个元素有了完整的概念。

    我希望你们都能理解删除数组的过程。
    谢谢你们。

    分类:
    iOS
    标签: