ساختمان داده چیست؟
روشهای سازماندهی داده در حافظه که سرعت عملیات مختلف (جستوجو، افزودن، حذف) را تعیین میکنند — انتخاب درست ساختار داده مهمترین تصمیم کارایی کد است.
چرا مهم است؟
انتخاب ساختار داده اشتباه (مثلاً List برای جستوجوی مکرر بهجای Dictionary) میتواند برنامهای درست را روی داده واقعی بهشدت کند کند؛ این تصمیم قبل از نوشتن حلقههای پیچیده اتخاذ میشود.
ساختارهای پرکاربرد و کاربردشان
- Array/List: دسترسی سریع با Index (
O(1))، مناسب وقتی ترتیب مهم است. - Dictionary/HashMap: جستوجو، افزودن و حذف در
O(1)میانگین — بهترین انتخاب برای «آیا این کلید وجود دارد؟». - Stack (LIFO): آخرین وارد، اولین خارج — مناسب Undo، بررسی پرانتز متوازن.
- Queue (FIFO): اولین وارد، اولین خارج — مناسب صف پردازش کار (Job Queue).
- Tree/Graph: داده سلسلهمراتبی یا شبکهای، مثل ساختار پوشه یا گراف اجتماعی.
مثال تصمیمگیری
// اشتباه: جستوجوی مکرر در List — O(n) در هر بار
var found = userList.Any(u => u.Id == targetId);
// بهتر: جستوجو در Dictionary — O(1) در هر بار
var found = userDict.ContainsKey(targetId);
اشتباه رایج
❌ استفاده پیشفرض از List<T> برای همهچیز، حتی وقتی عملیات اصلی جستوجوی مکرر بر اساس کلید است — انتخاب ساختار داده باید بر اساس عملیاتی باشد که بیشترین تکرار را دارد، نه عادت.
منبع و مطالعه بیشتر
خلاصه
ساختمان داده سرعت عملیات جستوجو/افزودن/حذف را تعیین میکند؛ Dictionary برای جستوجوی مکرر با کلید، List برای دسترسی ترتیبی. ساختار داده را بر اساس پرتکرارترین عملیات انتخاب کنید، نه عادت. مرجع کامل: مستندات Collections در Microsoft Learn.
