برای اینکه یه برنامه نویس خوب باشید باید انواع ساختمان داده رو به خوبی بشناسید و بتونید باهاشون کار کنید. بعد از اینکه در جلسات قبلی با انواع داده در برنامه نویسی و نحوه استفاده از متغیرها آشنا شدید؛ نوبت اینه که ساختمانهای داده یا Data Structure ها رو بشناسید. پس بدون هیچ مقدمه چینی اضافهتی بریم سراغ آموزش.
اصلا ساختمان داده چیه؟ و چرا باید یادش بگیریم؟
تا به اینجای کار با متغیرهایی آشنا شدیم که یک مقدار مشخص داشتند. اما گاهی اتفاق میفته که نیاز داریم به تعداد زیادی از این دادهها با یک اسم دسترسی داشته باشیم. برای مثال اگه بخواید سن یک نفر رو در حافظه ذخیره کنید، تعریف یک متغیر عدد صحیح به اسم age کار شما رو راه میندازه. اما اگه بخواید اسم 200 نفر رو ذخیره کنید کار سخت میشه. در چنین مواقعی (البته یکی از کاربردهاش)، استفاده از یک ساختار برای ذخیره دادهها بهمون کمک میکنه.
انواع ساختمان داده:
1 . آرایه:
آرایه یکی از انواع ساختمانهای داده است که به صورت ترتیبی از دادهها با طول مشخص تعریف میشه. آرایه میتونه فقط یک نوع داده مشخص رو ذخیره کنه. یعنی وقتی آرایهای تعریف میکنید باید اولاً تعداد دادههایی که قصد دارید ذخیره کنید مشخص باشه. دوماً باید نوع دادهها یکسان باشه. مثلا سن 20 نفر، که تعدادشون 20 و نوع داده int هست. دادههای ذخیره شده در آرایه، از طریق اندیس محل قرارگیری در آرایه در دسترس هستن. اندیس آرایه معمولا از صفر شروع میشه (البته به زبان برنامه نویسی هم بستگی داره و گاهی اینطور نیست).
2 . پشته یا Stack:
پشته یکی دیگه از ساختمانهای داده است که امکان ذخیره سازی تعدادی داده رو به صورت ترتیبی فراهم میکنه. دسترسی به عناصر پشته به طور ترتیبی و فقط از یک طرف امکان پذیره.
اگه بخوام یه مثال خوب از استک بزنم، ازتون میخوام به یه کابینت فکر کنید که 10 تا بشقاب در اون روی هم چیده شده. این 10 بشقاب مثال خوبی از استک هستن چون دسترسی به بشقابها به طور ترتیبی و فقط از یک طرف (بالا) امکان پذیره. اولین بشقابی که میتونید بردارید، آخرین بشقابی هست که روی بشقابهای قبلی قرار دادید. نحوه عملکرد استک هم دقیقا همینه.
3 . صف:
توی دنیای واقعی مثالهای زیادی از صف دیدیم. صفها دقیقا مثل پشتهها هستن. با این تفاوت که اولین دادهای که وارد صف میشه، اولین دادهای هست که از صف خارج میشه. به این حالت FIFO (First in First Out) گفته میشه. در حالی که پشته دارای حالت LIFO به معنی First in Last Out هست.
4 . لیست پیوندی یا Linked List:
این ساختمان داده قابلیت ذخیره سازی ترتیبی از دادهها رو داره. با این تفاوت که هر عنصر این ساختمان داده علاوه بر مقدار داده شامل یک پوینتر برای نگهداری آدرس عنصر بعدی خودش هست. مزیت این ساختمان داده نسبت به سه ساختمان داده قبلی این هست که میتونید به هر نقطهای از این دنباله دسترسی داشته باشید. و فقط محدود به عنصر اول و آخر و اندیس نیست. شما میتونید عنصر جدیدی رو بین عنصر 3 و 4 درج کنید. فقط کافیه مقدار پوینترها رو تغییر بدید!!!. (اگه نمیدونی پوینتر چیه، میتونی به جلسه قبل مراجعه کنی و با آقای پوینتر آشنا بشی!!)
جمعبندی انواع ساختمان داده:
علاوه بر انواع ساختمان دادههای معرفی شده در این مقاله 3 نوع ساختمان داده دیگه به نامهای گراف، درخت و hash table وجود داره. اما از اونجایی که توضیح این سه ساختمان داده کمی پیچیده و نیازمند معرفی مفاهیم اولیه دیگه است، اینجا دربارهشون صحبت نمیکنیم.
هدف من در این دوره اینه که فارغ از درگیر شدن با پیچیدگی کدها مفاهیم رو درک کنید. لازمه بدونید فارغ از اینکه کدوم زبان برنامه نویسی رو انتخاب کنید این مفاهیم ثابت هستند. اما نحوه نوشتن کدها با توجه به زبان برنامه نویسی متفاوته. برای نمونه استفاده از ساختمان داده درخت در سی شارپ کار خیلی راحتیه ولی در سی پلاس پلاس با پیچیدگی بیشتری همراهه. بنابراین لازم ندیدم برای درک مفهوم شما رو با پیچیدگیهای کد درگیر کنم.
امیدوارم این مطلب براتون مفید بوده باشه. اگه هر سوالی در این باره دارید همین جا برای کامنت بذارید که کمکتون کنم.