در علوم کامپیوتری, به روشی برای ذخیره داده در کامپیوتر به منظور استفادهی کارا از آنها ساختار داده گفته میشود. اغلب, انتخاب ساختار داده از روی دقت, استفاده از الگوریتم های کارا را مقدور میسازد. انتخاب ساختار داده معمولاً با انتخاب چکیدهای از نمونههای داده آغاز میشود. ساختار دادههایی با طراحی مناسب, انجام عملیات بحرانی متفاوت با حداقل استفاده از منابع, زمان اجرایی و حافظه را ممکن میسازد. ساختار دادهها با استفاده از انواع دادهها,ارجاعات و عملیات انجام شده بر آنها اجرا میشوند.
انواع مختلف ساختار داده برای موارد متفاوت استفاده مناسب هستند و برخی از آنها مخصوص به فعالیتی مشخص هستند. برای مثال, درختان B- (B- trees) مناسب اجرای داده ها در زمانی هستند که میزهای مسیر یابی(Routing Tables) به منظور داشتن کارایی بر شبکهای از ماشینها تکیه کردهاند.
همانطور که تجربه در ساخت سیستم های عظیم نشان داده است سختی اجرا, کیفیت و عملکرد نتیجه نهایی به میزان زیادی به انتخاب بهترین ساختار داده بستگی دارد, بنابراین در طراحی بسیاری از انواع برنامهها, انتخاب ساختار داده یکی از نگرانیهای اولیه به شمار میآید. بعد از انتخاب ساختار داده, الگوریتم-های مورد استفاده واضح میشوند. گاهی مسیر کاری برعکس است- ساختار دادهای را به این منظور انتخاب میکنیم که الگوریتم یا فعالیت کلیدی مورد نظر ما با این ساختار داده بهتر کار میکند. در هر دو صورت, انتخاب ساختار دادهی مناسب بحرانی است.
این نحوه فکر آغازی برای بسیاری از روشهای طراحی و زبانهای برنامهریزی است که ساختار دادهها را به عنوان عامل کلیدی سازماندهی مد نظر گرفتهاند. بیشتر زبانها نوعی مدول سیستم را در بر دارند که استفادهی مجدد و ایمن از دادهها را با پنهان کردن جزئیات اجرایی در پس واسطی(interface) کنترل شده, ممکن میسازد. زبانهای برنامهنویسی مقصود گرا (object oriented) مانند C++ و Java از کلاسها به همین منظور استفاده میکنند.
به دلیل اهمیت فراوان ساختارهای داده, بسیاری از آنها در کتابخانههای زبانها و محیطهای برنامهنویسی امروزه مانند C++ و مایکروسافت نت ذخیره شدهاند.
مبانی سازنده بیشتر ساختارهای داده شامل آرایهها, سوابق (Record), اتحادهای متمایز و ارجاعات میشوند. برای مثال, ارجاعی که میتواند پوچ باشد, از ارجاعات و اتحادهای متمایز تشکیل شده است و آسانترین ساختار دادههای ارتباطی که همان لیست پیوسته است, از سوابق و این نوع ارجاعات ساخته شده است.
ساختارهای داده اجراها یا واسطها را نشان میدهند:
ساختار داده را میتوان به عنوان واسطی میان دو کارکرد در نظر گرفت. همچنین میتوان یک ساختار داده را به عنوان اجرای روشهای دستیابی به ذخیرهای سازماندهی شده با توجه به انواع دادههای مربوط در نظر گرفت.
در اصطلاح کامپیوتری، ساختمان داده به روشهایی از ذخیره اطلاعات گفته می شود که برای استفاده بهینه از اطلاعات ذخیره شده اتخاذ می شود. غالباً انتخاب یک ساختمان داده موجب ایجاد الگوریتم (الخوارزمی) های متناسب با آن خواهد شد که این دو در کنار هم موجب افزایش سرعت انجام یک وظیفه یا کاهش مصرف حافظه برای پردازش داده می شود؛ سنگ بنای ساختمان های داده انواع داده و اشاره گرهای گوناگون است. که با توجه به چگونگی تعریف کاربرد آنها در هر زبان برنامه نویسی پیاده سازی آنها متفاوت خواهد بود. ما اکنون به پیاده سازی ساختمان های داده نمی پردازیم بلکه به توضیح انواع داده موجود در زبان پایتون می پردازیم؛ به دلیل سطح بالای این زبان انواع داده موجود در آن دارای ساختار پیچیده ای هستند که باعث شد ما از این انواع به عنوان ساختمانهای داده یاد کنیم.
در زبان های سطح پایین تر که اکثر آنها از پایه های پایتون به حساب می آیند انواع داده پیش فرض انواعی ابتدایی هستند که در زبان اسمبلی نیز قابل تعریف هستند. مثلاً در زبان C از انواع int , char,float, double, long ,short استفاده می شود که همه آنها دارای خاصیتی مشترک هستند و این خاصیت این است که بر روی پردازنده به طور مستقیم دارای دستور العمل هایی هستند که می توان با آنها کار کرد. همچنین برای ایجاد یک زنجیره(آرایه) از این انواع از علامت "[]" استفاده می شد، ولی از این انواع داده غیر از عملیات ریاضی کاری بر نمی آید ، مگر اینکه از آنها با قرار دادهای خاصی ساختمان داده هایی بسازیم.
[ویرایش]
انواع ساختمان داده در پایتون
یکی از مهمترین و پرکاربرد ترین این ساختمان های داده رشته های کاراکتری می باشند که در واقع یک زنجیره (Sequence) از بایت ها می باشند که در کار با ورودی ها، خروجی ها و ارتباطات گوناگون نقش مهمی ایفا می کنند، زیرا یکی از راههای محدود فهم انسان از دنیای کامپیوتر ارتباط متنی با این جهان می باشد.
دبگر ساختمان داده ای مهم در این زبان لیست ها (آرایه ها) هستند. در واقع این نوع داده یک نوع بسیار پیشرفته از آرایه های زبانهای سطح پایین است که علاوه بر خاصیت اندیس پذیری ، خاصیت تغییر اندازه و نگهداری انواع داده را بطور هم زمان دارا می باشد.