حانیه مهدی ابادی
حانیه مهدی ابادی
خواندن ۲ دقیقه·۳ سال پیش

صف و پیاده سازی در پایتون

صف (queue) : یک ساختمان داده ای است که عمل حذف از ابتدا و اضافه یا درج به انتهای ان انجام میشود . یعنی در یک صف موقعی که میخوایم یه عنصر حذف کنیم میایم اولین عنصری که وارد صف شده را حذف میکنیم.

صف از سیاست FIFO(first in first out) پیروی میکنه یعنی در واقع اولین عنصری که وارد میشه اولین عنصری میشه که حذف و خارج میشه.

توی صف ۲ تا تعریف داریم :

front : مشخص کننده نفر اوله (ابتدای صف)

rear : مشخص کننده نفر اخره (اشاره کننده به اخر صف )

Enqueue: (O(1))اضافه کردن به صف پیچیدگی زمانی

Dequeue : (O(1))حذف کردن از صف پیچیدگی زمانی

خب حالا میخوایم با پایتون با روش های زیر صف رو پیاده سازی کنیم :

  • list

با استفاده از لیست ها میتونیم یه صف پیاده سازی کنیم به این صورت که عمل Enqueue با استفاده از append و عمل Dequeue با استفاده از pop انجام میشه و خب لیست خیلی برای این کار کند هستند چون برای عمل حذف و اضافه از ابتدا نیازه که خمه عنصر ها یکی یکی شیفت پیدا کنند اون ور که یه زمان O(n) نیازه براش ولی کلا روش لیست برای کار با تعداد ایتم کم خوبه .

  • collections.deque

صف را می توانیم با استفاده از کلاس deque از ماژول Collections پیاده سازی کنیم . عمل Enqueue با استفاده از append و عمل Dequeue با استفاده از popleft انجام میشه . در مواردی که نیاز به عملیات سریعتر حذف و اضافه و پاپ از دو طرف ظر داریم ، Deque بهتر از لیسته ، زیرا deque پیچیدگی زمانی O (1) را برای عملیات درج و حذف فراهم می کند. (چون deques حذف و اضافه عناصر از هر دو طرف پشتیبانی می کند ، می تواند هم به عنوان صف و هم به عنوان پشته عمل کند.)

  • queue.Queue

اینجا Queue ماژول داخلی پایتون است که برای پیاده سازی صف استفاده می شود.این صف از قانون FIFO پیروی می کند. عمل Enqueue با استفاده از put و عمل Dequeue با استفاده از get انجام میشه.

همانطور که مشاهده می کنید در خط اخر براش همیشه منتظر میمونه تا عنصری در دسترس شه میتونیم به جاش ازget_nowait استفاده کنیم که در صورت خالی بودن پشته به ما error میده.


امیدوارم دوست داشته باشید برای توضیحات بیشتر به این سایت و این سایت میتونین برین .

ساختمان دادهصفپیاده سازی
شاید از این پست‌ها خوشتان بیاید