数据结构中的数组:是什么、数组操作[示例]

数据结构中的数组是什么?

数组是一种数据结构,用于存储多个具有相似数据类型的项。数组的项在相邻的内存位置上分配。这些内存位置称为该数组的元素。数组中元素的总数称为长度

数组的详细信息是通过其位置访问的。此引用称为索引下标

数组的概念

Concept Diagram of Arrays
数组的概念图

上图说明了

  1. 数组是元素的容器。
  2. 元素具有特定的值和数据类型,例如“ABC”、“TRUE”或“FALSE”等。
  3. 每个元素都有自己的索引,用于访问该元素。

注意

  • 元素存储在连续的内存位置。
  • 索引总是小于数组项的总数。
  • 在语法方面,声明为数组的任何变量都可以存储多个值。
  • 几乎所有语言对数组的理解都相同,但声明和初始化数组的方式不同。
  • 然而,在所有初始化中,三个部分将始终保持不变:数组名称、元素和元素的数​​据类型。

下图说明了在 Python 和 C++ 中声明数组的语法,以表明尽管不同语言的语法可能略有不同,但概念保持不变。

Understand Syntax of Arrays

理解数组语法
  • 数组名称:方便引用元素集合
  • 数据类型:用于类型检查和数据完整性
  • 元素:数组中的数据值

为什么我们需要数组?

以下是数据结构中使用数组的一些原因

  • 数组最适合将多个值存储在单个变量中
  • 数组更擅长轻松快速地处理许多值
  • 在数组中对值进行排序和搜索更容易

在 Python 中创建数组

Python 中,数组与列表不同;列表可以包含各种数据类型的数组项,而数组只能包含相同数据类型的项。

Python 有一个用于处理数组的单独模块,名为 array,您需要在开始处理它们之前导入它。

注意:数组必须包含实数,如整数和浮点数,不允许使用字符串。

以下代码说明了如何在 Python 中创建整数数组来存储账户余额

 import array
 balance = array.array('i', [300,200,100])
 print(balance)

在 Python 中声明数组的方法

您可以在初始化 Python 数组时使用以下语法进行声明。

arrayName = array.array(type code for data type, [array,items])

下图解释了语法。

Syntax of Array in Python

Python 中数组的语法

  1. 标识符:指定一个名称,就像您通常为变量命名一样
  2. 模块:Python 有一个用于创建数组的特殊模块,名为“array”——在使用它之前必须导入它
  3. 方法:array 模块有一个用于初始化数组的方法。它接受两个参数:typecode(类型码)和 elements(元素)。
  4. 类型码:使用可用的类型码指定数据类型(参见下面的列表)
  5. 元素:在方括号内指定数组元素,例如 [130,450,103]

下表说明了支持的数据类型的可用类型码

类型码 C 类型 Python 类型 最小字节数
‘c’ char 字符 1
‘B’ 无符号字符 int 1
‘b’ 有符号字符 int 1
‘u’ Py_UNICODE Unicode 字符 2
‘h’ 有符号短整型 int 2
‘H’ 无符号短整型 int 2
‘i’ 有符号整型 int 2
‘I’ 无符号整型 long 2
‘l’ 有符号长整型 int 4
‘L’ 无符号长整型 long 4
‘f’ float float 4
‘d’ double float 8

如何访问特定的数组值?

您可以使用索引访问任何数组项。

语法

arrayName[indexNum]

示例

balance[1]

下图说明了通过索引访问数组项的基本概念。

Access an Array Element

访问数组元素

在这里,我们使用索引 1 访问了数组的第二个值。输出将是 200,也就是 balance 数组的第二个值。

import array
balance = array.array('i', [300,200,100])
print(balance[1])

输出

200

数组操作

Python 的 array 模块有单独的函数来执行数组操作。这是一种破坏性的数组操作方法,意味着修改将保存在数组变量中。

插入

使用此操作,您可以将一个或多个项插入到数组的开头、结尾或任何给定索引处。此方法需要两个参数:index(索引)和 value(值)。

语法

arrayName.insert(index, value)

示例

让我们在数组的第二个项目之后添加一个新值。目前,我们的 balance 数组有三个项目:300、200 和 100。那么,值为 200 的第二个数组项的索引是多少?如果你说 1。

要在索引 1“之后”插入新值,您需要在 insert 方法中引用索引 2,如下所示

import array
balance = array.array('i', [300,200,100])
balance.insert(2, 150)

现在,要验证新值是否已插入,请键入数组名称并按 Enter 键

import array
balance = array.array('i', [300,200,100])
balance.insert(2, 150)
print(balance)

输出

array('i', [300,200,150,100])

删除

通过此操作,您可以按值从数组中删除一个项目。此方法仅接受一个参数:值。运行此方法后,数组项将被重新排列,并且索引将被重新分配。

语法

arrayName.remove(value)

示例

让我们从数组中删除值为 150 的项。目前,我们的 balance 数组有四个项目:300、200、150 和 100。因此,要从数组中删除 150,您只需在方法参数中键入 150。很简单,对吧?

import array
balance = array.array('i', [300,200,100])
balance.insert(2, 150)
print(balance)
balance.remove(150)

现在,要验证值是否已删除,请键入数组名称并按 Enter 键

import array
balance = array.array('i', [300,200,100])
balance.insert(2, 150)
print(balance)
balance.remove(150)
print(balance)

输出

 array('i', [300,200,100])

搜索

使用此操作,您可以根据值在数组中搜索项。此方法只接受一个参数:value(值)。这是一种非破坏性方法,意味着它不会影响数组值。

语法

arrayName.index(value)

示例

让我们在数组中搜索值为 150 的项。目前,我们的 balance 数组有四个项目:300、200、150 和 100。因此,要在数组中搜索 150,您只需在方法参数中键入 150。这非常容易。此方法返回搜索值的索引。

import array
balance = array.array('i', [300,200,150,100])
print(balance.index(150))

输出

2

UPDATE

此操作与 insert 方法非常相似,不同之处在于它将替换给定索引处已有的值。这意味着您将简单地在给定索引处分配一个新值。此方法需要两个参数:index(索引)和 value(值)。

语法

arrayName.udpate(index, value)

示例

假设我们的数组有四个项目:300、200、150 和 100,我们想用 145 替换 150。那么 150 的索引是多少?

如果你说是 2,那真是太棒了。

要替换索引为 2 的 150,您需要使用简单的赋值运算符来引用索引 2,如下所示

import array
balance = array.array('i', [300,200,150,100])
balance[2] = 145

现在,要验证值是否已更新,请键入数组名称并按 Enter 键

import array
balance = array.array('i', [300,200,150,100])
balance[2] = 145
print(balance)

输出

array('i', [300,200,145,100])

遍历

您可以使用循环遍历 python 数组,如下所示

import array
balance = array.array('i', [300,200,100])
for x in balance:
	print(x)

输出

300
200
100

在 C++ 中创建数组

C++ 语言在创建数组方面比 Python 更灵活。您可以通过后面提到的三种方式在 C++ 中创建 C++ 数组

以下代码说明了如何在 C++ 中创建整数数组来存储账户余额

#include <iostream>
using namespace std;

int main()
{
  int balance[3] = { 300, 200, 100 };
  for (int i = 0; i < 3; i++)
    {
      cout << "value of i: " << balance[i] << endl;
    }
  return 0;
}

C++ 中声明数组的方法

您可以声明三种语法的数组。哪种适合您的程序,这个选择取决于您的程序需求。

按大小声明

语法

dataType arrayName[arraySize];

示例

int balance[3];

仅声明初始化数组项

语法

dataType arrayName[] = {array, items};

示例

int balance[] = { 300, 200, 100 };

按大小声明并初始化数组项

语法

dataType arrayName[arraySize] = {array, items};

示例

int balance[3] = { 300, 200, 100 };

如何访问特定的数组值?

您可以使用索引访问任何数组项。

语法

arrayName[indexNum]

示例

balance[1]

下图说明了通过索引访问数组项的基本概念。

Accessing an Array Element

访问数组元素

在这里,我们使用索引 1 访问了数组的第二个值。输出将是 200,也就是 balance 数组的第二个值。

#include <iostream>
using namespace std;

int main()
{
  int balance[3] = { 300, 200, 100 };
  cout << balance[1];

  return 0;
}

输出

200

C++ 中的数组操作

与 Python 不同,在 C++ 中,您必须自己编写逻辑来执行 C++ 数组上的插入、删除、搜索、更新和遍历操作。

插入

插入操作的逻辑如下

  • 遍历数组项
  • 将它们移到更大的索引
  • 在给定索引处添加一个新的数组项

在下面的示例中,balance 数组中有 5 个项目,我们想在值为 200 的后面添加一个新项目。这意味着我们必须将 200 之后的所有项目移到更大的索引,然后插入我们的新值 150。

#include <iostream>
#include <stdio.h>

main() {
   int pos = 2;
   int size = 4;
   int balance[] = {300,200,100,50,0};
   
   printf("BEFORE INCREMENT: \n");
   for(int i = 0; i<5; i++) {
      printf("%d\n",balance[i]);
   }

   /* FOR SHIFTING ITEMS TO A GREATER INDEX */
   for(int i = size; i >= pos; i--) {
       balance[i+1]=balance[i];
   }

   /* FOR INSERTING VALUE AT OUR DESIRED INDEX */   
   balance[pos] = 150;
   
   printf("AFTER INCREMENT: \n");
   

   /* FOR PRINTING THE NEW ARRAY */   
   for(int i = 0; i<6; i++) {
      printf("%d\n",balance[i]);
   }
}

输出

BEFORE INCREMENT
300
200
100
50
0
AFTERINCREMENT
300
200
150
100
50
0

Java 中的数组操作

让我们创建一个 Java 程序,在这个 Java 数组程序中,我们将从用户那里接受数组元素的大小和值。

import java.util.Scanner;

public class AddElements {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        System.out.println("Enter the size of the array");
        int n=sc.nextInt();

        int arr[]=new int[n];

        System.out.println("Enter Elements in the array");
        for(int i=0;i<n;i++)
        {
            arr[i]=sc.nextInt();
        }
        System.out.println("Elements in the array");
        for(int j=0;j<n;j++)
        {
            System.out.print(arr[j]+" ");
        }
    }
}

输出:-

Enter the size of the array

5
Enter Elements in the array

1
2
3
4
5
Elements in the array
1 2 3 4 5 

修改数组中的元素:-

通过给定索引更新元素。

Java 程序演示如何修改数组中的元素

import java.util.Scanner;

public class ModifyElement {
    public static void main(String[] args) {
        int arr[]={1,2,3,4,5};
        int length= arr.length;
        Scanner sc=new Scanner(System.in);

        System.out.println("Array Elements Before modify");
        for(int i=0;i<length;i++)
        {
            System.out.print(arr[i]+" ");
        }


        System.out.println("\nEnter the position where you want to change in an array");
        int pos=sc.nextInt();

        System.out.println("Enter the value");
        int val=sc.nextInt();

        arr[pos]=val;

        System.out.println("Array Elements After modify");
        for(int j=0;j<length;j++)
        {
            System.out.print(arr[j]+" ");
        }
    }
}

输出:-

Array Elements Before modify
1 2 3 4 5 
Enter the position where you want to change in an array

2
Enter the value
8
Array Elements After modify
1 2 8 4 5 

访问数组中的元素:-

打印所有数组元素。

Java 程序演示如何遍历数组

public class AccessElements {
    public static void main(String[] args) {
        int arr[]={1,2,3,4,5};
        int length= arr.length;

        System.out.println("Array Elements are:-");
        for(int i=0;i<length;i++)
        {
            System.out.print(arr[i]+" ");
        }

    }
}

输出:-

Array Elements are:-
1 2 3 4 5 

摘要

  • 数组是用于存储具有相似数据类型的多个数据项的数据结构
  • 标识符、数据类型、数组长度、元素和索引是数组的主要部分
  • 使用索引处理数组元素的值
  • 数组在保持数据类型不变方面具有出色的支持
  • 在大多数语言中,数组是通过指定标识符、数据类型和包含的元素来创建的
  • 数组最适合处理大量值,以及快速排序和搜索
  • Python 具有用于执行基本数组操作(如插入、删除、搜索、更新和遍历)的模块和内置方法
  • C++ 需要为基本的数组操作(如插入、删除、搜索、更新和遍历)定义程序