อาร์เรย์ในโครงสร้างข้อมูล (Operations)

⚡ สรุปอย่างชาญฉลาด

อาร์เรย์ในโครงสร้างข้อมูลใช้สำหรับจัดเก็บข้อมูลประเภทเดียวกันหลายรายการในตำแหน่งหน่วยความจำที่ต่อเนื่องกัน โดยแต่ละรายการสามารถเข้าถึงได้ด้วยดัชนี บทช่วยสอนนี้จะอธิบายแนวคิด ความสำคัญของอาร์เรย์ และวิธีการสร้างและใช้งานอาร์เรย์ Python, C++และ Java พร้อมตัวอย่าง

  • 📦 คำจำกัดความหลัก: อาร์เรย์เก็บองค์ประกอบประเภทเดียวกันหลายๆ ตัวไว้ในหน่วยความจำที่อยู่ติดกัน โดยสามารถเข้าถึงได้ด้วยดัชนี
  • ⚡ การเข้าถึงที่รวดเร็ว: สามารถดึงข้อมูลองค์ประกอบใดๆ ได้ในเวลาคงที่โดยใช้ดัชนีขององค์ประกอบนั้น
  • 🛠️ ห้า Operaชั่น: ชุดเครื่องมือสำหรับแทรก ลบ ค้นหา อัปเดต และสำรวจอาร์เรย์
  • 🌐 ข้ามภาษา: Python ใช้โมดูลอาร์เรย์; C++ และ Java ประกาศอาร์เรย์แบบดั้งเดิมด้วยตรรกะที่กำหนดเอง
  • 🤖 ความเกี่ยวข้องของ AI: อาร์เรย์เป็นพื้นฐานของเทนเซอร์และเมทริกซ์ ซึ่งเป็นส่วนสำคัญในการคำนวณทางด้านการเรียนรู้ของเครื่อง

อาร์เรย์ในโครงสร้างข้อมูล (Operations)

Array ในโครงสร้างข้อมูลคืออะไร?

An แถว อาร์เรย์เป็นโครงสร้างข้อมูลสำหรับจัดเก็บข้อมูลมากกว่าหนึ่งรายการที่มีชนิดข้อมูลคล้ายกัน รายการในอาร์เรย์จะถูกจัดสรรในตำแหน่งหน่วยความจำที่อยู่ติดกัน และตำแหน่งเหล่านี้เรียกว่า ช่องข้อมูล องค์ประกอบ ของอาร์เรย์ จำนวนองค์ประกอบทั้งหมดในอาร์เรย์คือขนาดของมัน ความยาว.

แต่ละองค์ประกอบสามารถเข้าถึงได้โดยใช้ตำแหน่งของมัน และการอ้างอิงนี้เรียกว่า ตัวอ้างอิง ดัชนี or ตัวห้อย.

แนวคิดของอาร์เรย์

แผนภาพแนวคิดของอาร์เรย์

แผนภาพแนวคิดของอาร์เรย์

แผนภาพด้านบนแสดงให้เห็นว่า:

  1. อาร์เรย์เป็นที่เก็บขององค์ประกอบ
  2. องค์ประกอบแต่ละตัวมีค่าและชนิดข้อมูลเฉพาะ เช่น “ABC”, TRUE หรือ FALSE
  3. แต่ละองค์ประกอบจะมีดัชนีของตัวเอง ซึ่งใช้ในการเข้าถึงองค์ประกอบนั้น

หมายเหตุ

  • องค์ประกอบจะถูกจัดเก็บไว้ในตำแหน่งหน่วยความจำที่อยู่ติดกัน
  • ดัชนีจะน้อยกว่าจำนวนรายการอาร์เรย์ทั้งหมดเสมอ
  • ตัวแปรใดๆ ที่ประกาศเป็นอาร์เรย์สามารถเก็บค่าได้หลายค่า
  • ภาษาโปรแกรมเกือบทุกภาษามีแนวคิดเรื่องอาร์เรย์เหมือนกัน แต่แตกต่างกันในวิธีการประกาศและกำหนดค่าเริ่มต้นให้กับอาร์เรย์เหล่านั้น
  • ส่วนประกอบสามส่วนที่เหมือนกันในทุกการกำหนดค่าเริ่มต้น ได้แก่ ชื่อของอาร์เรย์ องค์ประกอบของอาร์เรย์ และชนิดข้อมูลขององค์ประกอบเหล่านั้น

แผนภาพต่อไปนี้แสดงไวยากรณ์สำหรับการประกาศตัวแปร อาร์เรย์ใน Python และ C++ซึ่งแสดงให้เห็นว่าแนวคิดยังคงเหมือนเดิม แม้ว่าไวยากรณ์จะแตกต่างกันเล็กน้อยในแต่ละภาษา

ทำความเข้าใจไวยากรณ์ของอาร์เรย์

ทำความเข้าใจไวยากรณ์ของอาร์เรย์

  • ชื่ออาร์เรย์: จำเป็นสำหรับการอ้างอิงชุดองค์ประกอบได้อย่างง่ายดาย
  • ประเภทข้อมูล: จำเป็นสำหรับการตรวจสอบประเภทและความสมบูรณ์ของข้อมูล
  • องค์ประกอบ: ค่าข้อมูลที่มีอยู่ในอาร์เรย์

ทำไมเราจึงต้องการอาร์เรย์?

  • อาร์เรย์เหมาะอย่างยิ่งสำหรับการจัดเก็บค่าหลายค่าในตัวแปรเดียว
  • พวกเขาสามารถประมวลผลค่าต่างๆ ได้อย่างง่ายดายและรวดเร็ว
  • การเรียงลำดับและการค้นหาค่าต่างๆ ทำได้ง่ายกว่าเมื่อใช้อาร์เรย์

การสร้างอาร์เรย์ใน Python

In Pythonอาร์เรย์แตกต่างจากลิสต์ตรงที่ ลิสต์สามารถเก็บรายการที่มีชนิดข้อมูลต่างกันได้ ในขณะที่อาร์เรย์สามารถเก็บรายการที่มีชนิดข้อมูลเดียวกันเท่านั้น Python มีโมดูลแยกต่างหากสำหรับจัดการอาร์เรย์ เรียกว่า arrayซึ่งคุณต้องนำเข้าก่อนจึงจะใช้งานได้

หมายเหตุ อาร์เรย์ต้องประกอบด้วยตัวเลขจริง เช่น จำนวนเต็มและจำนวนทศนิยม ไม่อนุญาตให้ใช้สตริง

โค้ดต่อไปนี้สร้างอาร์เรย์จำนวนเต็มใน Python เพื่อบันทึกยอดคงเหลือในบัญชี:

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

วิธีการประกาศอาร์เรย์ใน Python

คุณสามารถประกาศอาร์เรย์ใน Python ขณะทำการเริ่มต้นใช้งานโดยใช้ไวยากรณ์ดังต่อไปนี้:

arrayName = array.array(typecode, [array_items])

ไวยากรณ์ของอาร์เรย์ใน Python

ไวยากรณ์ของอาร์เรย์ใน Python

  1. ตัวระบุ: ระบุชื่อเช่นเดียวกับที่คุณทำกับตัวแปรทั่วไป
  2. โมดูล: Python มีโมดูลพิเศษที่เรียกว่า "array" ซึ่งคุณต้องนำเข้าก่อน
  3. วิธีการ: โมดูล array มีเมธอดสำหรับเริ่มต้นค่า array โดยรับอาร์กิวเมนต์สองตัว คือ typecode และ elements
  4. รหัสประเภท: ระบุชนิดข้อมูลโดยใช้รหัสชนิดข้อมูลที่มีอยู่ (ดูตารางด้านล่าง)
  5. องค์ประกอบ: ระบุองค์ประกอบของอาร์เรย์ภายในวงเล็บเหลี่ยม เช่น [130, 450, 103]

ตารางด้านล่างแสดงรายการรหัสประเภท (typecodes) ที่มีให้สำหรับประเภทข้อมูลที่รองรับ

พิมพ์รหัส Type C Python ประเภท ขนาดขั้นต่ำ (ไบต์)
'b' ถ่านที่ลงนาม int 1
'B' ถ่านที่ไม่ได้ลงนาม int 1
'ยู' Py_UNICODE อักขระ Unicode 2
'ชม' ลงนามสั้น ๆ int 2
'H' สั้นไม่ได้ลงนาม int 2
'ผม' ลงนามใน int 2
'ผม' int ที่ไม่ได้ลงนาม int 2
ฉัน เซ็นนาน int 4
'L' ไม่ได้ลงนามยาว int 4
'F' ลอย ลอย 4
'd' สอง ลอย 8

วิธีเข้าถึงค่าเฉพาะในอาร์เรย์?

คุณสามารถเข้าถึงรายการใดๆ ในอาร์เรย์ได้โดยใช้ดัชนีของรายการนั้น

ไวยากรณ์:

arrayName[indexNum]

ตัวอย่าง:

balance[1]

เข้าถึงองค์ประกอบอาร์เรย์

เข้าถึงองค์ประกอบอาร์เรย์

ในที่นี้ เราเข้าถึงค่าที่สองของอาร์เรย์โดยใช้ดัชนี 1 ผลลัพธ์ที่ได้คือ 200 ซึ่งเป็นค่าที่สองของอาร์เรย์ยอดคงเหลือ

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

Output:

200

แถว Operaต่างๆใน Python

การขอ Python โมดูล array มีฟังก์ชันแยกต่างหากสำหรับการดำเนินการกับอาร์เรย์ วิธีการเหล่านี้เป็นแบบทำลายข้อมูล หมายความว่าการเปลี่ยนแปลงจะถูกบันทึกไว้ในตัวแปรอาร์เรย์

สิ่งที่ใส่เข้าไป

คำสั่งนี้จะแทรกรายการหนึ่งรายการหรือมากกว่านั้นลงในอาร์เรย์ที่ต้น ที่ท้าย หรือที่ดัชนีใดๆ ก็ได้ โดยต้องการอาร์กิวเมนต์สองตัวคือ ดัชนีและค่า

arrayName.insert(index, value)

ตัวอย่าง: หากต้องการแทรกค่าใหม่ต่อจากดัชนี 1 (ค่า 200) ให้ใช้ดัชนี 2 ในเมธอดการแทรก

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

Output:

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

ลบ

การดำเนินการนี้จะลบรายการหนึ่งรายการออกจากอาร์เรย์โดยใช้ค่า โดยรับอาร์กิวเมนต์เพียงตัวเดียว หลังจากดำเนินการเสร็จสิ้น รายการต่างๆ จะถูกจัดเรียงใหม่และดัชนีจะถูกกำหนดใหม่

arrayName.remove(value)

ตัวอย่าง:

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

Output:

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

ค้นหา

การดำเนินการนี้จะค้นหารายการตามค่าและส่งคืนค่าดัชนี เป็นวิธีการที่ไม่ทำลายข้อมูลในอาร์เรย์ ดังนั้นจึงไม่เปลี่ยนแปลงค่าในอาร์เรย์

arrayName.index(value)

ตัวอย่าง:

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

Output:

2

บันทึก

การอัปเดตจะแทนที่ค่าที่มีอยู่ ณ ดัชนีที่กำหนดโดยใช้ตัวดำเนินการกำหนดค่าแบบง่าย (Python อาร์เรย์ไม่มี update() วิธี.)

arrayName[index] = value

ตัวอย่าง: เพื่อแทนที่ 150 (ที่ดัชนี 2) ด้วย 145:

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

Output:

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

ทราเวิร์

คุณสามารถข้ามผ่าน Python อาร์เรย์โดยใช้ลูป:

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

Output:

300
200
100

การสร้างอาร์เรย์ใน C++

C++ มีความยืดหยุ่นมากกว่า Python เมื่อสร้างอาร์เรย์ คุณสามารถสร้างได้ 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];   // e.g. int balance[3];

การประกาศโดยใช้เฉพาะรายการในอาร์เรย์:

dataType arrayName[] = {array_items};   // e.g. int balance[] = { 300, 200, 100 };

การประกาศแยกตามขนาดและจำนวนชิ้น:

dataType arrayName[arraySize] = {array_items};   // e.g. int balance[3] = { 300, 200, 100 };

วิธีเข้าถึงค่าเฉพาะในอาร์เรย์ใน C++?

การเข้าถึงองค์ประกอบอาร์เรย์

การเข้าถึงองค์ประกอบอาร์เรย์

#include <iostream>
using namespace std;

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

Output:

200

แถว Operaต่างๆใน C++

แตกต่าง Pythonใน C++ คุณต้องเขียนโปรแกรมตรรกะด้วยตนเองสำหรับการดำเนินการแทรก ลบ ค้นหา อัปเดต และสำรวจข้อมูล

สิ่งที่ใส่เข้าไป

หลักการแทรกข้อมูลคือ: วนลูปผ่านรายการในอาร์เรย์ เลื่อนรายการเหล่านั้นไปยังดัชนีที่มากกว่า จากนั้นเพิ่มรายการใหม่ที่ดัชนีที่กำหนด ตัวอย่างด้านล่างมีห้ารายการและแทรก 150 ต่อจากค่า 200 ทันที

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

main() {
   int pos = 2;
   int size = 4;
   int balance[] = {300, 200, 100, 50, 0};

   printf("BEFORE INSERT:\n");
   for(int i = 0; i < 5; i++) {
      printf("%d\n", balance[i]);
   }

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

   /* INSERT VALUE AT THE DESIRED INDEX */
   balance[pos] = 150;

   printf("AFTER INSERT:\n");
   for(int i = 0; i < 6; i++) {
      printf("%d\n", balance[i]);
   }
}

แถว Operaต่างๆใน 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] + " ");
        }
    }
}

แก้ไของค์ประกอบใน 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 to change");
        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] + " ");
        }
    }
}

การเข้าถึงองค์ประกอบใน 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] + " ");
        }
    }
}

คำถามที่พบบ่อย

อาร์เรย์คือกลุ่มขององค์ประกอบที่มีชนิดข้อมูลเดียวกันซึ่งจัดเก็บไว้ในตำแหน่งหน่วยความจำที่ต่อเนื่องกัน แต่ละองค์ประกอบสามารถเข้าถึงได้โดยใช้ดัชนี ทำให้อาร์เรย์มีประสิทธิภาพในการจัดเก็บและเรียกใช้ค่าที่เกี่ยวข้องกันหลายค่า

A Python ลิสต์สามารถเก็บข้อมูลที่มีชนิดข้อมูลต่างกันได้ ในขณะที่อาร์เรย์ (จากโมดูล array) จะเก็บข้อมูลที่มีชนิดข้อมูลเดียว อาร์เรย์มีประสิทธิภาพในการใช้หน่วยความจำมากกว่าสำหรับชุดข้อมูลตัวเลขขนาดใหญ่

การดำเนินการพื้นฐานห้าอย่าง ได้แก่ การแทรก (เพิ่มรายการ), การลบ (ลบรายการ), การค้นหา (ค้นหารายการตามค่า), การอัปเดต (เปลี่ยนค่าที่ดัชนี) และการท่องไป (เยี่ยมชมทุกองค์ประกอบ)

การเข้าถึงองค์ประกอบโดยใช้ดัชนีใช้เวลา O(1) — เวลาคงที่ — เนื่องจากที่อยู่หน่วยความจำคำนวณโดยตรงจากที่อยู่ฐานและดัชนี การแทรกและการลบอาจใช้เวลา O(n) เนื่องจากการเลื่อน

การจัดเก็บข้อมูลแบบต่อเนื่องช่วยให้โปรแกรมสามารถคำนวณที่อยู่ขององค์ประกอบใดๆ ได้ทันทีจากที่อยู่ฐานบวกดัชนีคูณด้วยขนาดขององค์ประกอบ นี่คือสิ่งที่ทำให้อาร์เรย์สามารถเข้าถึงข้อมูลแบบสุ่มได้อย่างรวดเร็วและใช้เวลาคงที่

Python จำเป็นต้องใช้โมดูลอาร์เรย์และมีวิธีการใช้งานในตัว C++ และ Java สามารถประกาศอาร์เรย์ได้โดยตรง แต่ต้องเขียนโค้ดสำหรับการแทรก ลบ และค้นหาด้วยตนเอง Java นอกจากนี้ อาร์เรย์ยังแสดงคุณสมบัติความยาวอีกด้วย

อาร์เรย์เป็นพื้นฐานของเวกเตอร์ เมทริกซ์ และเทนเซอร์ที่ใช้ในปัญญาประดิษฐ์ ไลบรารีอย่าง NumPy และ TensorFlow จัดเก็บข้อมูลการฝึกอบรมและน้ำหนักของโมเดลในรูปแบบอาร์เรย์หลายมิติเพื่อการคำนวณเชิงตัวเลขที่รวดเร็ว

ใช่แล้ว ผู้ช่วยเขียนโค้ด AI ตรวจจับข้อผิดพลาดเรื่องดัชนีผิดตำแหน่งและเกินขอบเขต แนะนำวิธีแก้ไข และอธิบายว่าทำไมดัชนีจึงเกินความยาวของอาร์เรย์ping ผู้เริ่มต้นสามารถแก้ไขข้อผิดพลาดทั่วไปเกี่ยวกับอาร์เรย์ได้อย่างรวดเร็ว

สรุปโพสต์นี้ด้วย: