زمان تخمینی مطالعه: 6 دقیقه
آرایه مجموعهای از آیتمها هم نوع است که در مکانهای حافظه به هم پیوسته ذخیره میشوند. این نوع داده یکی از محبوبترین و سادهترین ساختارهای داده است و اغلب برای پیاده سازی سایر ساختارهای داده استفاده میشود. هر آیتم در یک آرایه در شروع با 0 ایندکس میشود(در برخی زبانهای برنامه نویسی با 1 شروع میشود.)
اصطلاحات پایه آرایه
- شاخص آرایه: در یک آرایه، عناصر با شاخص هایشان مشخص میشوند. شاخص آرایهها از 0 شروع میشود.
- عنصر آرایه: عناصر آیتمهایی هستند که در یک آرایه ذخیره میشوند و با فهرست آنها میتوان به آنها دسترسی داشت.
- طول آرایه: طول یک آرایه با تعداد عناصری که میتواند داشته باشد تعیین میشود.
نمایش آرایه
نمایش یک آرایه را میتوان با اعلان آن تعریف کرد. اعلان به معنای تخصیص حافظه برای آرایهای با اندازه معین است.
آرایهها را میتوان به روشهای مختلف در زبانهای مختلف تعریف کرد. برای توضیح بهتر، در زیر برخی از تعریفهای آرایه خاص زبان آورده شده است.
زبان ++C
int arr[5]; // This array will store integer type element
char arr[10]; // This array will store char type element
float arr[20]; // This array will store float type element
زبان C
int arr[5]; // This array will store integer type element
char arr[10]; // This array will store char type element
float arr[20]; // This array will store float type element
زبان جاوا
/* Static Arrays are arrays that are declared before runtime
and are assigned values while writing the code.
*/
// The syntax of declaring a static array is:
[]
= {, ,….. };
// Example:
int arr[] = { 2, 5, 6, 9, 7, 4, 3 };
زبان پایتون
arr = [10, 20, 30] # This array will store integer
arr2 = ['c', 'd', 'e'] # This array will store characters
arr3 = [28.5, 36.5, 40.2] # This array will store floating element
زبان #C
int[] arr = new int[5]; // This array will store integer type element
زبان جاوا اسکریپت
// JS code
let arr=[10,20,30]; // This array will store integer
let arr2 = ['c', 'd', 'e'] // This array will store characters
let arr3 = [28.5, 36.5, 40.2] // This array will store floating elements
روشهای اعلان فوق تخصیص حافظه استاتیک یا کامپایل است ، به این معنی که هنگام تهیه یک برنامه، حافظه عنصر آرایه اختصاص مییابد. در اینجا فقط یک اندازه ثابت (به عنوان مثال اندازهای که در داخل براکتها ذکر شده است) حافظه برای ذخیره سازی اختصاص مییابد. اگر در تعریف آرایهها اندازه بزرگتر را اعلام کنیم و تعداد کمتری از عناصر را ذخیره کنیم، منجر به هدر رفتن حافظه میشود یا در مواردی که اندازه کمتری را اعلام میکنیم، حافظه کافی برای ذخیره بقیه عناصر را نخواهیم داشت. در چنین مواردی، تخصیص حافظه ثابت ترجیح داده نمیشود.
آیا امکان ایجاد آرایه پویا وجود دارد؟
پاسخ به این سوال بله است. امکان تخصیص حافظه به صورت پویا وجود دارد. بنابراین، تخصیص حافظه پویا فرآیند تخصیص فضای حافظه در طول زمان اجرا یا زمان اجرا است. این امکان در زبانهای زیر پشتیبانی میشود:
زبان ++C
int *array = new int[5];
زبان جاوا
int arr[10]; // Store integer elements
String arr[5]; // Store String type of elements
زبان پایتون ورژن 3:
# list of integers
my_list = [1, 2, 3, 4]
#Empty list
my_list = []
#list of mixed data types
my_list = ["Hello", 1, 5.5]
زبان #C
int[] numArray = new int[] {};
زبان جاوا اسکریپت
// JavaScript has dynamic arrays: their size is not predetermined, nor the type of data.
// Create array using literal
var x = ["a", "b", "c"];
// Create array using constructor
var x = new Array();
// Create array using constructor with items
var y = new Array("a", "b", "c");
زبان PHP
$arr = array("a","b","c");
چرا ساختارهای داده آرایه مورد نیاز است؟
فرض کنید کلاسی متشکل از 5 دانش آموز وجود دارد و باید نمرات آنها را در امتحان ثبت کنیم، میتوانیم این کار را با تعریف مجزای پنج متغیر و پیگیری سوابق انجام دهیم، اما اگر تعداد دانش آموزان بسیار زیاد شود، چه میشود. برای دستکاری و حفظ دادهها بسیار چالش برانگیز است. معنی آن این است که ما میتوانیم از متغیرهای عادی (v1، v2، v3، ..) زمانی که تعداد اشیاء کمی داریم استفاده کنیم. اما اگر بخواهیم تعداد زیادی نمونه را ذخیره کنیم، مدیریت آنها با متغیرهای عادی مشکل میشود. ایده آرایهها این است که نمونههای زیادی را در یک متغیر ادغام کنیم.
انواع آرایهها
آرایهها به طور کلی به سه دسته تک بعدی، دو بعدی و سه بعدی تقسیم میشود. آرایه تک بعدی در واقع ردیفی از دادههای پست سر هم است. آرایههای دو بعدی در واقع آرایهای از آرایهها یا به عبارتی یک ماتریس شامل ردیف و ستون است. آرایههای سه بعدی شکل پیچیدهتری بوده و در واقع آرایهای از آرایههای دو بعدی است.
انواع عملیات آرایهها
- پیمایش: در عناصر یک آرایه پیمایش کنید.
- درج: درج یک عنصر جدید در یک آرایه.
- حذف: حذف عنصر از آرایهها.
- جستجو: جستجوی یک عنصر در آرایهها.
- مرتب سازی: حفظ ترتیب عناصر در آرایهها.
مزایای استفاده از آرایهها
- آرایهها اجازه دسترسی تصادفی به عناصر را میدهند. این امر باعث میشود دسترسی به عناصر بر اساس موقعیت سریعتر شود.
- آرایهها کش لوکالیتی بهتری دارند که تفاوت بسیار زیادی در عملکرد ایجاد میکند.
- آرایهها آیتمهای داده چندینگانه از یک نوع را با استفاده از یک نام واحد نشان میدهند.
- آرایهها دادههای متعددی از انواع مشابه را با نام یکسان ذخیره می کنند.
- از ساختارهای داده آرایهای برای پیاده سازی سایر ساختارهای داده مانند لیستهای پیوندی، پشتهها، صفها، درختان، گرافها و غیره استفاده میشود.
معایب استفاده از آرایهها
- از آنجایی که آرایهها اندازه ثابتی دارند، پس از تخصیص حافظه به آنها، نمیتوان آن را کم یا زیاد کرد و در صورت لزوم ذخیره دادههای اضافی غیرممکن میشود. آرایهای با اندازه ثابت آرایه ایستا نامیده میشود.
- تخصیص حافظه کمتر از مقدار مورد نیاز به یک آرایه منجر به از دست رفتن دادهها میشود.
- یک آرایه در ذات همگن است، بنابراین، یک آرایه واحد نمیتواند مقادیر انواع دادههای مختلف را ذخیره کند.
- آرایهها دادهها را در مکانهای حافظه پیوسته ذخیره میکنند که اجرای حذف و درج را بسیار دشوار میکند. این مشکل با پیاده سازی لیستهای پیوندی برطرف میشود که امکان دسترسی متوالی به عناصر را فراهم میکند.
کاربرد آرایهها
- در پیاده سازی سایر ساختارهای داده مانند لیستهای آرایهها، پشتهها، جداول درهم سازی(Hash table)، بردارها و ماتریسها استفاده میشوند.
- رکوردهای پایگاه داده معمولاً به صورت آرایهها پیاده سازی میشوند.
- در جداول جستجو توسط کامپیوتر استفاده میشود.
- برای الگوریتمهای مرتبسازی مختلف مانند مرتبسازی درج حبابی، مرتبسازی ادغام و مرتبسازی سریع استفاده میشود.