删除要删除的元素,并将其他元素移到左边以保持所有元素在一起。
如果数组是静态分配的内存,内存不能被删除。当程序终止时,内存被释放。
如果数组是动态分配的内存,额外的内存可以通过使用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>
using namespace std;
int main()
int a[50],x,n,i,j,b[50];
cout<<"How many elements of array you want to create";
cin>>n;
cout<<"\nEnter elements of array\n";
for(i=0,j=0; i<n; ++i)
cin>>a[i];
cout<<"\Enter element to delete:";
cin>>x;
for(i=0,j=0;i<n;++i)
if(a[i]!=x)
b[j++]=a[i];
if(j==n)
cout<<"\nSorry!!!Element is not in the array";
exit(0);
cout<<"\nNew array is";
for(i=0;i<j;i++)
cout<<b[i]<<" ";
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++中删除数组或删除数组中的一个元素有了完整的概念。
我希望你们都能理解删除数组的过程。
谢谢你们。