با سلام خدمت دوستان
یه توضیحی در مورد ساختمان داده ها می خوام
درمورد آرایه ها
تعداد عناصر
فرمولش اینه
میزان حفظه مورد نیاز آرایه
و آدرس عنصر ارایه یک بعدی
خانه های آرایه توسط اندیس مشخص می شوند که یک عدد صحیح است، مثلا خانه شماره 5 یعنی خانه ای که
اندیس اش 5 است. هر آرایه ای یک اندیس شروع و یک اندیس پایان دارد که شماره های معتبر اندیس بین ایندو
خواهند بود.
L1 اندیس شروع آرایه است و L اختصاری Low یعنی پایین است .در بعضی زبان ها اندیس شروع همیشه 0 است
ولی در زبان های دیگر می تواند هر عدد مثبتی باشد. مثلا اگر L1 برابر 4 باشد، اولین اندیس آرایه 4 است.
U1 اندیس پایان آرایه است و U اختصاری Up یعنی بالا است. مقدار U1 همیشه مساوی با بزرگتر از L1 است.
اگر اندیس شروع یک آرایه (L1) برابر 1 و اندیس پایان آرایه (U1) برابر با 5 باشد، اندیس های معتبر آرایه مقادیر
1 و 2 و 3 و 4 و 5 خواهند بود. تعداد خانه های آرایه برابر است با 5 خانه که از فرمول زیر مشخص می شود :
کد:
U1 - L1 + 1 = 5 - 1 + 1 = 5
در آرایه های ساده، طول داده هر خانه بر حسب بایت ثابت و مشخص است. مثلا برای هر خانه از آرایه فرضا 4 بایت
در نظر گرفته می شود. اگر ما تعداد خانه های آرایه و طول داده هر خانه بر حسب بایت را بدانیم طبیعتا
می توانیم با ضرب کردن ایندو عدد در هم میزان حافظه لازم برای ایجاد کردن کل آرایه را بدست بیاوریم.
مثلا اگر تعداد خانه های آرایه 5 خانه و هر خانه 4 بایت باشد، جمعا برای این آرایه به 20 بایت فضا احتیاج داریم.
اگر طول داده یک خانه از حافظه را با N مشخص کنیم، یعنی در مثال N را 4 در نظر بگیریم، با استفاده از فرمول
قبلی میزان حافظه کل آرایه برابر است با :
کد:
(U1 - L1 + 1) * N = (5 - 1 + 1) * 4 = 5 * 4 = 20
اگر آدرس شروع آرایه در حافظه را 0 فرض کنیم، داده ای که در اولین خانه آرایه نوشته می شود در آدرس 0
ذخیره خواهد شد. چون هر خانه از آرایه N بایت طول دارد، داده های خانه دوم آرایه N بایت بعد از داده های
خانه اول ذخیره خواهد شد، یعنی در آدرس N و به همین ترتیب داده های خانه سوم در آدرس N + N و ...
طبق این روال اگر بخواهیم بدانیم که داده های خانه ای با اندیس i در چه آدرسی از حافظه نوشته می شود،
فرمول اش چنین خواهد بود :
مثلا اگر طول داده هر خانه (N) برابر 4 و اندیس شروع آرایه (L1) برابر 1 باشد، داده های خانه اندیس 1
در آدرس 0 نوشته خواهند شد :
کد:
(i - L1) * N = (1 - 1) * 4 = 0 * 4 = 0
و داده های خانه اندیس 2 در آدرس 4 نوشته خواهند شد :
کد:
(i - L1) * N = (2 - 1) * 4 = 1 * 4 = 4
البته ما فرض کرده ایم که آدرس شروع آرایه در حافظه 0 است، یعنی ما آدرس شروع آرایه را نسبت به خود آرایه
محاسبه می کنیم، یعنی نسبی است. اگر آدرس شروع ارایه در حافظه 0 نیست باید نتیجه فرمول قبلی
را با آدرس شروع آرایه در حافظه جمع کنیم تا آدرس نسبی به مطلق تبدیل شود.