یکی از ساختمان داده های مهم که تقریباً در تمامی زبانهای برنامه نویسی مورداستفاده قرار میگیرد، آرایه ها هستند. آرایه ها، در واقع لیستی متشکل از چندین متغیر هستند که درون یک ساختار منظم ذخیره شدهاند. معمولاً آرایه ها متغیرهایی از نوع یکسان دارند، اما در بعضی از زبانهای تحت مفسر (Interpreter) همانند زبان پایتون، هر نوع دادهای را میتوان درون یک آرایه ذخیره کرد. فرض کنید یک متغیر با نام sale دارید و مقدار فروش یک محصول در طول یک روز را در آن ذخیره کردهاید. اگر بخواهید فرضاً مقدار فروش در طول یک هفته را ذخیره کنید به جای استفاده از یک متغیر باید از یک آرایه با 7 عنصر استفاده کنید که هر اندیس آن برابر مقدار فروش محصول در یکی از روزهای هفته است؛ نام این آرایه را میتوانیم sales بگذاریم:

ساختار یک آرایه
ساختار کلی یک آرایه بهصورت شکل زیر است.

اصطلاحات مهم مربوط به آرایهها در لیست زیر آمده است:
- اندازه آرایه (Length): به تعداد خانههای هر آرایه، طول یا اندازه آن آرایه گفته میشود.
- اندیس آرایه (Index): به هر خانه آرایه یک اندیس میگویند؛ در واقع اندیس نقش آدرس یا اشاره گر متغیرهای ذخیره شده در آرایه را دارد؛ بنابراین وقتی میخواهیم از یک مقدار مشخصی از درون آرایه استفاده کنیم، بهوسیله اندیس آن خانه این کار را انجام میدهیم.
- بعد آرایه (Dimension): هر آرایه دارای بعد است، بهعنوانمثال آرایه بالا دارای تنها یک بعد است. آرایه ها میتوانند 2 بعدی همانند یک ماتریس و یا چندبعدی باشند.
ابعاد آرایه در زبان های برنامه نویسی
همانطور که گفته شد آرایه ها در زبان های برنامه نویسی میتوانند از 1 بعد شروع شوند تا به بالا؛ اما آرایه های تکبعدی و دوبعدی بیشترین کاربرد را دارند. از آرایه های تکبعدی برای ایجاد لیست استفاده میشود؛ بهعنوانمثال لیست نمرات دانشآموزان، لیست قیمتها، از آرایه های دوبعدی نیز برای تعریف ماتریسها استفاده میشود. در تعریف آرایه در زبان های برنامه نویسی باید بهخاطر داشته باشید که واژه مورداستفاده برای هر بعد چیست؟ بهعنوانمثال در آرایه های تکبعدی، بهاندازه آرایه Size میگویند. در آرایه های 2 بعدی، بهاندازه افقی، سطر یا Row و بهاندازه عمودی، ستون یا Column میگویند. در آرایه 3 بعدی به سطر و ستون یک عمق یا Depth هم اضافه میشود که نمایانگر اندازه آرایه در جهت z (داخل) است. خلاصه این مطالب را در تصویر زیر مشاهده میکنید:

در تصویر زیر تعریف یک آرایه تکبعدی با سایز 5، یک آرایه دوبعدی با 3 سطر و 4 ستون و در نهایت یک آرایه سهبعدی با عمق 2 به همراه 3 سطر و 4 ستون را مشاهده میکنید.

در ادامه میخواهیم این آرایه را در زبان های مختلف برنامه نویسی تعریف کنیم.
تعریف آرایه در زبان های برنامه نویسی
رویکرد تعریف آرایه در زبان های برنامه نویسی با یکدیگر متفاوت است؛ بهعنوانمثال تعریف آرایه در زبان C++ و زبان C# با تعریف آرایه در زبان پایتون کاملاً متفاوت است؛ چراکه زبانهایی مانند C++ تحت کامپایلر (Compiler) هستند و نوع آن در زمان کامپایل مشخص میشود؛ اما در زبانهایی مانند پایتون که یکزبان تحت مفسر است، نوع آرایه و متغیرهای درون آن در زمان اجرا (Runtime) و موقع استفاده از آنها مشخص میشود. در این قسمت تعریف آرایه 1، 2 و 3 بعدی را در زبانهای مختلف برنامه نویسی آوردهایم تا با نحوه تعریف آرایه در زبانهای برنامه نویسی آشنا شوید:
زبان C و C++
در زبان برنامه نویسی سی پلاس پلاس و زبان C، تعریف آرایه ها همانند ساختار زیر است:
آرایه تک بعدی <data_type> <array_name>[<size>];
آرایه دو بعدی <data_type> <array_name>[<rows>][<columns>];
آرایه سه بعدی <data_type> <array_name>[<depth>][<rows>][<columns>];
در کد زیر 3 آرایه در زبان C++ و C تعریف شده است:
int myArray[5];
int twoDArray[3][4];
int threeDArray[2][3][4];
زبان C#
ساختار تعریف آرایه در زبان سیشارپ بهصورت زیر است:
آرایه تک بعدی<data_type>[] <array_name> = new <data_type>[<size>];
آرایه دو بعدی<data_type>[,] <array_name> = new <data_type>[<rows>, <columns>];
آرایه سه بعدی<data_type>[,,] <array_name> = new <data_type>[<depth>, <rows>, <columns>];
در کد زیر 3 آرایه در زبان C# تعریف شده است:
int[] myArray = new int[5];
int[,] twoDArray = new int[3, 4];
int[,,] threeDArray = new int[2, 3, 4];
زبان جاوا
ساختار تعریف آرایه در زبان برنامهنویسی جاوا بهصورت زیر است:
آرایه تک بعدی <data_type>[] <array_name> = new <data_type>[<size>];
آرایه دو بعدی <data_type>[][] <array_name> = new <data_type>[<rows>][<columns>];
آرایه سه بعدی <data_type>[][][] <array_name> = new <data_type>[<depth>][<rows>][<columns>];
در کد زیر 3 آرایه در زبان جاوا تعریف شده است:
int[] myArray = new int[5];
int[][] twoDArray = new int[3][4];
int[][][] threeDArray = new int[2][3][4];
زبان پایتون
در زبان برنامه نویسی پایتون، تعریف آرایه بهطورکلی با زبانهایی که بالاتر ذکر شدهاند فرق میکند. اولین نکته واژه آرایه است؛ در زبان پایتون به جای واژه آرایه از واژه لیست (list) استفاده میشود. در زبانهای بالا، در واقع زبانهای کامپایلری هستند، نیاز به تعیین نوع و تعیین اندازه آرایه بود؛ اما در زبان پایتون نیازی به مشخصکردن سایز آرایه و نوع ذخیرهسازی آن نداریم؛ در واقع اندازه آرایه در زبان پایتون بهصورت پویا با اضافهکردن متغیرهای جدید به آن تغییر میکند؛ همچنین در یک آرایه میتوان هر نوع مقداری را ذخیره کرد؛ بهعنوانمثال اندیس 0 میتواند متغیر از نوع عدد صحیح باشد و اندیس 1 از نوع رشته (String) و مثلاً اندیس 2 میتواند از جنس یک آبجکت از کلاس ساخته شده توسط برنامه نویس باشد.
برای تعریف آرایه در زبان پایتون از ساختار زیر پیروی میکنیم:
آرایه تک بعدی <list_name> = [<element1>, <element2>, ..., <elementN>]
آرایه دو بعدی <list_name> = [[<element11>, <element12>, ..., <element1N>],
[<element21>, <element22>, ..., <element2N>],
...
[<elementM1>, <elementM2>, ..., <elementMN>]]
آرایه سه بعدی <list_name> = [[[<element111>, <element112>, ..., <element11N>],
[<element121>, <element122>, ..., <element12N>],
...
[<element1P1>, <element1P2>, ..., <element1PN>]],
...
[[<elementM11>, <elementM12>, ..., <elementM1N>],
[<elementM21>, <elementM22>, ..., <elementM2N>],
...
[<elementMP1>, <elementMP2>, ..., <elementMPN>]]]
همانطور که مشاهده میکنید تعریف لیست یا آرایه در زبان پایتون بسیار ساده است و تنها نیاز است تعداد [ ]ها برای هر بعد تغییر کند. در کد زیر 3 آرایه در زبان پایتون تعریف شده است:
my_list = [1, 2, 3, 4, 5]
twoDList = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
threeDList = [[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[10, 11, 12]]]
زبان R
زبان برنامه نویسی R یکی از زبانهایی است که برای مسائل آماری و تحلیل دادهها بسیار مورداستفاده محققین و دانشجویان واقع میشود. آرایه یکی از مباحث مهم در این زبان است که با نامهای Vector (برای آرایه تکبعدی) و Matrix یا ماتریس برای آرایه های دو و چندبعدی شناخته میشوند. در کد زیر 3 آرایه به زبان آر نوشته شده است:
my_vector <- c(1, 2, 3, 4, 5)
twoDMatrix <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow=3, ncol=4)
threeDArray <- array(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), dim=c(2, 3, 4))
آموزش درس ساختمان داده
قبل از مطالعه ادامه مقاله لازم به ذکر است که برای مشاهده و آموزش سایر مباحث مربوط به درس ساختمان داده و الگوریتم میتوانید از فیلمهای زیر استفاده کنید
فیلم ساختمان داده جلسه 1
فیلم ساختمان داده جلسه 2
فیلم ساختمان داده جلسه 3
فیلم ساختمان داده جلسه 4
فیلم ساختمان داده جلسه 5
فیلم ساختمان داده جلسه 6
فیلم ساختمان داده جلسه 7
فیلم ساختمان داده جلسه 8
حل تست ساختمان و الگوریتم جلسه 1
حل تست ساختمان و الگوریتم جلسه 2
حل تست ساختمان و الگوریتم جلسه 3
ساختمان داده و طراحی الگوریتم کامپیوتر 1403
ساختمان داده و طراحی الگوریتم آیتی 1403
حل تست ساختمان و الگوریتم جلسه 4
انواع پیمایشهای درخت
نحوه ساخت درخت BST
آموزش درخت B-Tree
بررسی مرتبه ساخت هیپ
آموزش مرتب سازی سریع
آموزش شبکه شار
حل سوالات ساختمان ارشد کامپیوتر 99
حل ساختمان ارشد 95 بخش 1
حل ساختمان ارشد 95 بخش 2
دسترسی و استفاده از آرایه در برنامه نویسی
دسترسی به متغیرهای ذخیره شده درون خانههای آرایه از طریق اندیسهای آرایه ممکن میشود. رویکرد اندیس در زبانهای برنامه نویسی مختلف، متفاوت است؛ بهعنوانمثال اکثر زبانهایی که امروزه مورداستفاده قرار میگیرند مانند C++، Java، Python و... اندیس اولین خانه آرایه برابر 0 است؛ بنابراین اندیسهای یک آرایه با اندازه 7 از 0 شروع میشود تا 6. یعنی اندیس اولین خانه 0 و اندیس آخرین خانه برابر 6 است؛ اما دسته دیگری از زبانهای برنامه نویسی هستند که اندیس آرایه ها در آن زبان از صفر شروع نمیشود؛ بهعنوانمثال اندیس آرایه در زبانهایی مثل فرترن (Fortran)، متلب (Matlab) و زبان R از 1 شروع میشود. در کد جاوای زیر یک آرایه به نام sales از نوع عدد صحیح (Int) با اندازه 5 ایجاد شده است، سپس در خط 4 یک متغیر با نام sale ایجاد کردیم و مقدار آن را برابر با اندیس دوم آرایه sales قرار دادیم؛ باتوجه به اینکه اندیس از صفر شروع میشود، بنابراین متغیر sale برابر مقدار اندیس دوم؛ یعنی خانه سوم که برابر 30 است میشود.
public class Main {
public static void main(String[] args) {
int[] sales = {10, 20, 30, 40, 50}; // Initializing the array in one line
int sale = sales[2];
System.out.println("Value at index 2: " + sale);
}
}
بازنویسی کد بالا در زبان پایتون بهصورت زیر است:
sales = [10, 20, 30, 40, 50] # Initializing the list in one line
sale = sales[2]
print("Value at index 2:", sale)
اکنون اگر هرکدام از دو برنامه بالا را اجرا کنیم نتیجه بهصورت زیر در خروجی چاپ میشود:
Value at index 2: 30
مزایا و معایب آرایه ها
آرایه ها دارای مزایا و معایبی هستند که در اینجا به مهمترین آنها اشاره میکنیم:
مزایا
- دسترسی سریع: با استفاده از اندیس آرایه ها میتوان به هر خانه از آرایه در زمان ثابتی دسترسی پیدا کرد؛ بنابراین اندازه آرایه تأثیری در سرعت دسترسی به المانهای آن نخواهد گذاشت.
- حافظه پیوسته: المان های آرایه درون حافظه بهصورت پیوسته و پشتسرهم ذخیره میشوند؛ به همین علت پرفورمنس در بسیاری از مواقع به دلیل توانایی استفاده از حافظه کش (Cache) افزایش مییابد.
- سادهبودن: آرایه، ساختمان داده بسیار ساده و سر راستی بوده که بسیار قابلفهم و پرکاربرد است.
- پیمایش آسان: آرایه ها با یک حلقه ساده مثل for بهراحتی پیموده (Iterate) میشوند که برای پرفورمنس برنامهها مزیت مهمی محسوب میشود.
معایب
- اندازه ثابت: در بسیاری از زبانهای برنامه نویسی، اندازه آرایه ها ثابت است و در زمان تعریف مشخص میشود؛ بنابراین بهراحتی نمیتوان این مقدار را تغییر داد و نیاز به انجام فرایندهای پرهزینهای است.
- هدردادن حافظه: با تعریفکردن آرایه، خانههای حافظه به اندازه آرایه رزرو میشود؛ بنابراین اگر آرایهای پر نشود، در واقع حافظه را هدر داده است؛ چون قسمتهای رزرو شده دیگر نمیتوانند مقادیر دیگری را در خود ذخیره کنند.
- خطای IndexOutOfBoundsErrors: یکی از خطاهای بسیار آزاردهنده در برنامه نویسی، خطای IndexOutOfBoundsExceptions است و زمانی رخ میدهد که به یک اندیس غیرمعتبر بخواهیم دسترسی پیدا کنیم؛ مثلاً اگر اندازه آرایه 5 باشد، بزرگترین اندیسش 4 است، حال اگر ما به هر نحوی تلاش کنیم به اندیس 12 دسترسی پیدا کنیم (بهعنوانمثال در زبان جاوا) این استثنا رخ میدهد.
کاربرد آرایه ها در برنامه نویسی
آرایه کاربردهای فراوانی در برنامه نویسی دارد. در لیست زیر برخی از مهمترین آنها را ذکر کردهایم:
- برای ایجاد ساختمان دادههای دیگری مانند پشته (Stack)، لیست (List) و هیپ (Heap) میتوان از آرایه ها استفاده کرد.
- برای ذخیره کلکسیونی از دادههای یکسان مانند نامها، نمرات و بقیهی دادههای همسان، آرایه مناسبترین گزینه است.
- آرایه ها به طور گسترده برای الگوریتمهای جستجو مانند جستجوی حبابی و یا جستجوی انتخابی مورداستفاده قرار میگیرند.
- در بحث تحلیل و آنالیز دادههای آماری از آرایه ها استفاده میشود؛ بهعنوانمثال برای محاسبات میانگین، میانه و انحراف معیار، استفاده از آرایه گزینه بسیار مناسبی است.
جمع بندی
ساختمان داده آرایه یکی از ساختمان دادههای پرکاربرد در زبانهای برنامه نویسی است که در موارد مختلفی مورداستفاده قرار میگیرد. شاید در نگاه اول کار با آنها راحت به نظر برسد، اما وقتی آرایهرهای چندبعدی وارد مسائل پیچیده ریاضی میشود که نیاز داریم روی آنها عملیات خاصی را پیادهسازی کنیم، کار با آنها دیگر راحت نخواهد بود! البته برای کار با آرایه ها در زبان های برنامه نویسی مختلف کتابخانههایی به وجود آمده است؛ بهعنوانمثال در زبان پایتون کتابخانه Numpy ایجاد شده است و کار با آرایه را بسیار راحتتر کرده است. در این مقاله به بررسی آرایه در برنامه نویسی پرداختیم و جنبههای مختلف آرایه را در زبانهای مختلف مورد بررسی قرار دادیم.
آرایه در برنامه نویسی چیست؟
آرایه یک ساختمان داده با اندازه ثابت است که در آن برای ذخیره المانها یا متغیرهایی با نوع یکسان استفاده میشود. به آرایه میتوان به دید کلکسیونی از متغیرهایی با نوع یکسان نگاه کرد.
چند دسته آرایه در برنامه نویسی وجود دارد؟
بهطورکلی آرایه ها از لحاظ شکل به دودسته کلی تقسیم میشوند؛ آرایه های تکبعدی یا Single-Dimensional و آرایه های چندبعدی یا Multi-Dimensional. آرایه های تکبعدی شامل یک لیست خطی از دادهها است و آرایه های چندبعدی همانند ماتریسها در ریاضیات هستند.

















