PDA

View Full Version : حذف یک عنصر از ساختمان داده



نغمه
شنبه 28 فروردین 1389, 08:43 صبح
اگر از پشته ایستا یک عنصر را پاپ کنیم مکان آن عنصر در حافظه چه تغییری میکند؟ سوال کلی من اینه که حافظه پاک می شه یا آزاد می شه و مجاز میشه روی مقدار قبلی مقدار جدیدی نوشته شود؟
مثلا وقتی یک ارایه تعریف می کنیم حافظه تخصیص یافته به آن آرایه خالی است یا دارای مقادیر نامعتبر است تا مقادیر ارایه روی ان نوشته شود؟

Felony
شنبه 28 فروردین 1389, 09:43 صبح
اگر از پشته ایستا یک عنصر را پاپ کنیم مکان آن عنصر در حافظه چه تغییری میکند؟ سوال کلی من اینه که حافظه پاک می شه یا آزاد می شه و مجاز میشه روی مقدار قبلی مقدار جدیدی نوشته شود؟
خیر آزاد نمیشه فکر میکنم به nil اشاره میکنه ، یعنی در هر صورت در اختیار برنامتون هست .


مثلا وقتی یک ارایه تعریف می کنیم حافظه تخصیص یافته به آن آرایه خالی است یا دارای مقادیر نامعتبر است تا مقادیر ارایه روی ان نوشته شود؟
دارای مقادیری نامعتبر هست تا زمانی که خودتون خانه های آرایه رو پر کنید .

نغمه
شنبه 28 فروردین 1389, 09:56 صبح
خیر آزاد نمیشه فکر میکنم به nil اشاره میکنه ، یعنی در هر صورت در اختیار برنامتون هست .


.
از nil بودنش مطمن هستین؟

میشه گفت مقدار حذف شده در همون خونه می مونه ولی اشاره گر تاپ دیگه بهش اشاره نمی کنه؟به یک قبل از اون اشاره می کنه
این طوری که شما می گین محتویات خانه های یک پشته بعد از اینکه یک بار استفاده شده و همه پاک شده، همگی nil هستن ولی وقتی یک پشته تازه تعریف شده و هنوز هیچ استفاده ای ازش نشده محتویا ت خانه ها مقادیر نامعتبر هستند!!!!

Felony
شنبه 28 فروردین 1389, 10:42 صبح
از nil بودنش مطمن هستین؟
خیر اگر مطمئن بودم که نمیگفتم : فکر میکنم !

الان یه تست هایی کردم ، مطمئن شدم که به nil اشاره نمیکنه .
اگر پشته شما 7 تا خانه داشته باشه و خانه آخرش با 100 مقدار دهی شده باشه با حذف خانه 7 محتویات اون خانه هیچ تغییری نمیکنه ( همونطور که گفتم در اختیار برنامه میمونه و آزاد نمیشه تا دیگر برنامه ها ازش استفاده کنن چون ممکنه دوباره پشته بخواد پر بشه که در این صورت مشکل پیش میاد ) پس یعنی محتوای خانه 7 همون 100 باقی میمونه ولی دیگه پشته بهش اشاره نمیکنه یعنی اشاره گر آخرین خانه رو به خانه 6 منتقل میکنه تا زمانی که خانه شماره 7 دوباره مقدار دهی بشه .

نغمه
شنبه 28 فروردین 1389, 11:43 صبح
خیر اگر مطمئن بودم که نمیگفتم : فکر میکنم !

الان یه تست هایی کردم ، مطمئن شدم که به nil اشاره نمیکنه .
اگر پشته شما 7 تا خانه داشته باشه و خانه آخرش با 100 مقدار دهی شده باشه با حذف خانه 7 محتویات اون خانه هیچ تغییری نمیکنه ( همونطور که گفتم در اختیار برنامه میمونه و آزاد نمیشه تا دیگر برنامه ها ازش استفاده کنن چون ممکنه دوباره پشته بخواد پر بشه که در این صورت مشکل پیش میاد ) پس یعنی محتوای خانه 7 همون 100 باقی میمونه ولی دیگه پشته بهش اشاره نمیکنه یعنی اشاره گر آخرین خانه رو به خانه 6 منتقل میکنه تا زمانی که خانه شماره 7 دوباره مقدار دهی بشه .

پس چرا وقتی یک مقدار از پشته حذف می کنیم آن مقدار را در یک مکان دیگر ذخیره می کنیم و آدرس اون مکان را بر می گردونیم چرا آدرس همون خونه از پشته را برنمی گردونیم مثلا آدرس همون خونه ای که حاوی مقدار 100 است؟

اوبالیت به بو
شنبه 28 فروردین 1389, 13:34 عصر
وقتی که یک محلی از حافظه حذف منطقی میشه محتوا و آدرس فیزیکی اون آزاد میشه. وقتی که بافر می خواد یک بلوک رو در حافظه ذخیره کنه دنبال جایی می ره که کمترین فضای هرز رو در حافظه داشته باشه و چون این فضا از حافظه آزاد شده ممکن هست داده جدید در اون محل ذخیره بشه. پس طبیعی هست که دفعه بعد پشته شما آدرس جدیدی رو داشته باشه اگر پشته در محل قبلی ذخیره نشده باشه.

نغمه
شنبه 28 فروردین 1389, 14:20 عصر
وقتی که یک محلی از حافظه حذف منطقی میشه محتوا و آدرس فیزیکی اون آزاد میشه. وقتی که بافر می خواد یک بلوک رو در حافظه ذخیره کنه دنبال جایی می ره که کمترین فضای هرز رو در حافظه داشته باشه و چون این فضا از حافظه آزاد شده ممکن هست داده جدید در اون محل ذخیره بشه. پس طبیعی هست که دفعه بعد پشته شما آدرس جدیدی رو داشته باشه اگر پشته در محل قبلی ذخیره نشده باشه.
اگر پشته با استفاده از آرایه ها پیاده سازی بشه که نمشه هر قسمتش یه جای حافظه باشه این طوری که شما می گین!!!!

اوبالیت به بو
شنبه 28 فروردین 1389, 18:12 عصر
اگر پشته با استفاده از آرایه ها پیاده سازی بشه که نمشه هر قسمتش یه جای حافظه باشه این طوری که شما می گین!!!! نه، خانه های آرایه از یک شماره تو حافظه شروع می شن و در نقطه ای به پایان می رسن (آرایه معین)

مثلاً ممکن هست آرایه A از خانه 105 حافظه شروع بشه. A = 1 to 5

عنصر شماره پنجم آرایه شماره 109 حافظه قرار میگیره و عنصر شماره سوم خانه 106.
اگر آرایه A رو پاک کنید یا new کنید دفعه بعد ممکن هست از خانه شماره 2050 حافظه شروع بشه.

نغمه
شنبه 28 فروردین 1389, 20:25 عصر
در نهایت اگر محتویات یک صف یا پشته که با آرایه پیاده سازی شده اند را delete کنیم بعد از delete جای آنها در حافظه پی قرار می گیره؟