صف نوعی ساختار داده است که داده ها را به صورت اول به روش اول نگه می دارد. صف از یک سفارش خاص برای انجام عملیات بر روی داده ها پیروی می کند. این صف به طور گسترده ای به عنوان لیست انتظار برای منابع مشترک یا دستگاه هایی مانند چاپگرها ، پردازنده ها ، دیسک و غیره اجرا می شود. انواع مختلفی از صف ها مانند یک صف ساده ، صف اولویت ، صف دایره ای و صف های جداگانه یا دو مرحله ای وجود دارد. تمام این نوع صف ها برای سناریوهای مختلف استفاده می شود. به عنوان مثال ، صف ها بسیار مفید هستند ، اگر ما به فرایندی نیاز داریم که یکی پس از دیگری به طور خودکار به ترتیب یعنی درست مانند یک لیست اجرا شود. این وظایف را به روشی به نام "اول در ابتدا" پردازش می کند که به معنای اولین فرایند یا کار در صف است ، ابتدا اجرا و حذف می شود ، پس از شروع آن سایر فرآیندهای دیگر. یک صف را می توان در زبانهای برنامه نویسی مانند پایتون ، جاوا ، C ++ و غیره اجرا کرد. در اینجا قصد داریم در مورد اجرای آن در زبان برنامه نویسی پایتون بحث کنیم.
صف در پایتون چیست؟
همانطور که ما فقط بحث کردیم که صف چیست. در پایتون نیز یکسان است و در همان روش "اول در اول خارج" (FIFO) کار می کند. یک صف دارای دو انتهای مانند قسمت جلویی و انتهای عقب است. مواردی که می توان از آن درج شده است ، انتهای عقب است و مواردی که از صف خارج می شوند از قسمت جلویی هستند. بنابراین ، موردی که ابتدا در صف درج شده است ، اولین موردی خواهد بود که از صف حذف می شود و روش FIFO را برآورده می کند.
صف پایتون چگونه کار می کند؟
صف پایتون را می توان به راحتی برای کار با مشکلات دنیای واقعی اجرا کرد. برای درک بهتر ، می توان آن را با یک خط از افرادی که منتظر شماره آنها برای خرید بلیط از پیشخوان بلیط هستند مقایسه کرد. اولین کسی که وارد خط شد ، بلیط ها را ابتدا دریافت می کند و پس از آن ، او از خط خارج می شود و به دنبال آن شخص بعدی در خط و غیره. یک منطق مشابه در صف پایتون نیز برای اجرای برنامه ها و فرآیندها اعمال می شود.
بگذارید نمودار زیر را ببینیم تا انتهای صف را بهتر بشناسیم:
در صف بالا ، عنصر اول 1 نمایانگر قسمت جلوی صف است و آخرین عنصر 5 نشانگر انتهای صف است که در نهایت پردازش می شود. درج بعد از آخرین عنصر یعنی 5 و حذف عناصر از ابتدای لیست یعنی 1 انجام می شود.
انواع صف در پایتون
همانطور که فقط در مقدمه بحث کردیم که 4 نوع صف در ساختار داده وجود دارد. اما ، در پایتون ، عمدتا دو نوع صف وجود دارد که در زیر مورد بحث قرار می گیرد:
- FIFO QUEUE: FIFO برای "First در First Out" مخفف است که به معنای عنصری است که در ابتدا درج می شود ، عنصری است که ابتدا بیرون می آید. در حالی که با Fifo Queue در پایتون کار می کنیم ، باید از ماژول صف استفاده کنیم.
- Lifo Queue: LIFO مخفف "آخرین در First Out" است که به این معنی است که عنصری که در آخرین قرار می گیرد ، عنصری است که در ابتدا بیرون می آید. این دقیقاً مانند یک پشته است که در ابتدا با عنصر برتر درمان می شود. در حالی که با صف Lifo کار می کنیم ، باید از ماژول صف در پایتون کلاس Lifoqueue () تماس بگیریم.
عملیات در پایتون
عملیات موجود در پایتون به شرح زیر است:
- جلو: این عملیات اولین عنصر را از صف می دهد که پیچیدگی زمان این عملیات O (1) است.
- عقب: این عملیات آخرین عنصر را از صف که پیچیدگی زمان این عملیات O (1) است ، می دهد.
- Enqueue: در این عمل ، یک عنصر در انتهای صف اضافه می شود. هنگامی که هیچ ظرفیتی برای اضافه کردن عناصر به صف وجود ندارد ، به شرط سرریز می رود و پیچیدگی زمانی برای این عمل نیز O (1) است.
- Dequeue: در این نوع عملیات ، می توانیم عنصر را از هر انتهای صف مانند جلو یا عقب حذف کنیم. همچنین ، درج عناصر در هر دو انتها صورت می گیرد. پیچیدگی زمان برای این عملیات همان عملیات دیگر یعنی O (1) است.
روشهای موجود در صف
برخی از روشهای مهم در پایتون وجود دارد که بسیار مفید هستند. این روشها در زیر ذکر شده است:
- دریافت (): از این روش برای حذف و بازگرداندن یک عنصر از صف استفاده می شود. هنگامی که هیچ عنصری در صف وجود ندارد ، منتظر است تا عنصر در صف موجود باشد.
- قرار دادن (): از این روش برای اضافه کردن یک عنصر در صف استفاده می شود که می تواند به عنوان نمونه ای از صف نشان داده شود. اگر ظرفیتی برای افزودن عناصر بیشتر به صف وجود نداشته باشد ، این روش مسدود می شود.
- QSize: روش qsize () در کلاس صف پایتون تعداد کل عناصر موجود در صف را برمی گرداند. یا می توانیم بگوییم که این طول صف را به ما می گوید.
- کامل (): از این روش برای بررسی اینکه آیا صف پر است یا خیر ، در صورت پر بودن صف صحیح باز می گردد.
- MaxSize (): این روش یک عدد صحیح است که به حد مرز بالایی از تعداد عناصری که می توانند در صف وارد شوند ، می گوید. درج عناصر پس از رسیدن به حداکثر عناصر درج ، مسدود خواهد شد.
لیست پایتون داخلی
لیست داخلی روشهای موجود در پایتون می تواند به عنوان صف استفاده شود ، اما استفاده از این روشهای داخلی به عنوان صف وقتی از نظر عملکرد آن را می بینیم به خوبی مناسب نیست. روشهای داخلی در پایتون توابع درج () و پاپ () است که برای اضافه کردن و حذف عناصر از صف استفاده می شود. لیست ها در مقایسه با صف ها کمی کند هستند و دلیل این امر زمانی است که ما یک عنصر جدید را در لیست قرار می دهیم ، نیاز به تغییر عناصر توسط یک دارد. و این روند زمان (n) زمان می برد. برای درک بهتر این مفهوم ، مثال زیر را طی کنید:
مثال:
que = [] que. append (‘person1 ') que. append (‘ person2') que. append (‘person3 ') چاپ (que) #لیست به دلیل تغییر عناصر توسط یک مکان کاملاً کند است. چاپ (que. pop (0))
خروجی:
["شخص 1" ، "شخص 2" ، "شخص 3"]
صف کلاس: def __init __ (خود): self. queue = لیست () def add_elements (خود ، val): اگر val در self. queue: self. queue. insert (0 ، val) بازگرداندن واقعی بازگرداندن اندازه کاذب (خود): Retu Len (self. queue) oumqueue = queue () ousqueue. add_element ("person1") outqueue. add_element ("person2") outqueue. add_element ("person3") ماژوره. add_element ("person4") چاپ ("طول"از صف: "، ماسکو. size ())
خروجی:
طول صف: 4
حذف عناصر از یک صف
حذف عناصر از یک صف از انتهای عقب صف صورت می گیرد. فرایند از بین بردن یک عنصر از یک صف نیز به نام Deque نامیده می شود. بگذارید مثال زیر را ببینیم تا این مفهوم را با وضوح بیشتری درک کنیم:
class Queue: def __init__(self): self.queue = list() def add_element(self,val): # Insert method to add element in the queue if val not in self.queue: self.queue.insert(0,val) retu True retu False # Pop method to delete element from the queue def remove_element(self): if len(self.queue)>0: Retu Self. queue. pop () بازگشت ("صف خالی است") que = queue () que. add_element ("ژانویه") que. add_element ("فوریه") que. add_element ("مارس") que. add_element("آوریل") چاپ (que) چاپ (que. remove_element ()) چاپ (que. remove_element ())
خروجی:
مرتب سازی یک صف پایتون
مرتب سازی یک صف در برخی از سناریوهایی که در آن ما نیاز به انجام عملیات خاص داریم ، مهم می شود. این روش را می توان در پایتون با روش های مختلف انجام داد. در اینجا مثالی زیر برای درک بهتر مرتب سازی صف وجود دارد:
import queue q = queue.Queue() q.put(10) q.put(22) q.put(16) q.put(2) q.put(1) # Here, we use bubble sort algorithm for sorting n = q.qsize() for i in range(n): # Remove the element x = q.get() for j in range(n-1): # Remove the element y = q.get() if x>y: q. put (y) دیگری: q. put (x) x = y q. put (x) در حالی که (q. empty () == false): print (q. queue [0] ، end = "" ") q. get ()
خروجی:
معکوس یک صف پایتون
برای استفاده از یک صف دیگر می توان صف را برعکس کرد. همچنین می تواند برای بازگشت مجدد اجرا شود.
مثال زیر را می توان فهمید که چگونه می توانیم یک صف پایتون را معکوس کنیم:
وارد کردن صف q1 = queue. queue () q1. put (10) q1. put (4) q1. put (3) q1. put (20) q1. put (2) q1. put (9) def reversequeue (q1src ،q2dest): بافر = q1src. get () if (q1src. empty () == false): معکوس (q1src ، q2dest) #استفاده مجدد q2dest. put (بافر) بازگشت q2dest q2dest = quue. queue () qreversed = ReverseQueue (q1 ، q2dest) در حالی که (qreversed. empty () == false): print (qreversed. queue [0] ، end = "") qreversed. get ()
خروجی:
کار با یک کلاس queue. queue
کلاس های مختلف در ماژول صف پایتون قرار می گیرند. از بین تمام کلاس ها ، کلاس صف از اهمیت بیشتری برخوردار است که به محاسبات موازی و چند برنامه ریزی کمک می کند. این مفهوم را می توان به راحتی با مثال زیر درک کرد:
از صف واردات صف = صف = صف () que. put ('person1') que. put ('person2') que. put ('person3') چاپ (que) چاپ (que. get ()) چاپ (que. get()) چاپ (que. get ()) چاپ (que. get_nowait ()) چاپ (que. get ())
خروجی:
Traceback (جدیدترین تماس آخر):
پرونده "c:/کاربران/ashu lakhwan/pycharmprojects/hello/queue. py" ، خط 78 ، در
پرونده "C: Python lib queue. py" ، خط 198 ، در get_nowait
پرونده "C: Python lib queue. py" ، خط 167 ، در دریافت
کار با یک کلاس.
مجموعه. کلاس Deque هنگام اجرای یک صف دو پایان بسیار مفید می شود. از صف یا deque دو مرحله ای برای پشتیبانی از درج و حذف عناصر از هر دو انتهای مانند انتهای جلو و عقب استفاده می شود. پیچیدگی زمانی که لازم است برای تکمیل روند کار (1) است.
مثال مجموعه. کلاس Deque به شرح زیر است:
از مجموعه های واردات queue = deque () queue. append ("دوشنبه") صف. برنامه (سه شنبه ") صف. کار (" چهارشنبه ") چاپ (صف) (" روز دوشنبه "،" سه شنبه "،" چهارشنبه "']) چاپ (queue. popleft ()) چاپ (queue. popleft ()) چاپ (queue. popleft ()) queue. popleft ()
خروجی:
Deque (["دوشنبه" ، "سه شنبه" ، "چهارشنبه"])
Traceback (جدیدترین تماس آخر):
پرونده "c:/کاربران/ashu lakhwan/pycharmprojects/hello/queue. py" ، خط 101 ، در
IndexError: پاپ از یک دکوراسیون خالی
کار با کلاس چند پردازش
این کلاس می تواند برای پردازش موارد صف به صورت موازی توسط کارگران چند منظوره استفاده شود. چند پردازشکلاس Queue داده ها را بین چندین فرآیند به اشتراک می گذارد و اطلاعات مربوط به هر شیء را که می توان هنگام پردازش موارد انتخاب کرد ، ذخیره می کند.
مثال:
از صف واردات چند پردازش صف ورود = صف () صف ("دوشنبه") صف ("سه شنبه") صف (چهارشنبه "چاپ (چهارشنبه) چاپ (صف) چاپ (queue. get ()) چاپ (queue. get. get()) چاپ (queue. get ())
خروجی:
اجرای صف پایتون
روش های مختلفی برای اجرای صف برای پایتون وجود دارد. با این حال ، برخی از روشهای متداول برای اجرای صف در پایتون موارد زیر را شامل می شوند:
این روشها در این مقاله در بالا مورد بحث قرار گرفته است که هر موضوع دارای یک مثال جداگانه است. ممکن است برای درک روشهای مختلف اجرای صف پایتون به بخش قبلی مراجعه کنید.
چگونه می توان بیش از یک عنصر را در پایتون اضافه کرد؟
در این مقاله ، ما دیده ایم که چگونه می توانیم یک مورد یا عنصر واحد را به صف خود اضافه کنیم. حال ، بگذارید ببینیم چگونه می توانیم بیش از یک عنصر را در پایتون اضافه کنیم:
اضافه کردن یک مورد در Fifoqueue:
وارد کردن صف que = queue. queue () برای من در محدوده (5): que. put (i) در حالی که que. empty (): چاپ ("مقدار درج شده است" ، que)
خروجی:
مقدار درج شده 0 است
مقدار درج شده 1 است
مقدار درج شده 2 است
مقدار درج شده 3 است
مقدار درج شده 4 است
در مثال بالا ، روش PUT () عناصر را از 0 تا 5 به صف منتقل می کند.
ابتدا در اولین نمونه از صف
FIFO به معنای عنصری است که در ابتدا درج شده است ، اولین عنصری است که از لیست حذف می شود. برای اجرای صف FIFO ، ما موظفیم ماژول صف () را در پایتون وارد کنیم.
بگذارید نمونه ای از اجرای صف FIFO را برای اضافه کردن یک مورد مشاهده کنیم:
وارد کردن صف que = queue. queue () que. put (10) روش put () در مثال بالا یک عنصر را به صف اضافه می کند. برای حذف یک عنصر از صف ما ، مثال زیر را می توان درک کرد: وارد کردن صف que = queue. queue () que. put (10) removed_item = que. get () چاپ ("عنصر حذف شده از صف است" ، repoved_item_item repoved_itemed)
خروجی:
عنصر حذف شده از صف 10 است
در مثال بالا ، از روش GET () برای حذف عنصر از صف استفاده می شود.
آخرین مثال در اولین نمونه از صف
LIFO به معنای عنصری است که در آخر وارد می شود ، اولین عنصری است که از بین می رود یا حذف می شود. برای پیاده سازی ، LIFO ، ما ملزم به وارد کردن ماژول صف و استفاده از روش Lifoqueue () در پایتون هستیم.
بگذارید درک کنیم که چگونه می توانیم اضافه کردن یک عنصر در صف Lifo را پیاده سازی کنیم:
وارد کردن صف que = queue. lifoqueue () que. put (5) روش put () یک عنصر را به صف lifo اضافه می کند. حذف یک عنصر از صف Lifo: queue queue queue. lifoqueue () que. put (5) remove_item = que. get () چاپ ("مورد حذف شده" ، remove_item)
خروجی:
مورد حذف شده 5 است
نتیجه
در این مقاله ، ما در مورد برخی از مفاهیم مفید و مهم صف پایتون بحث کردیم و همچنین بررسی کردیم که چگونه می توان آنها را به عنوان مثال اجرا کرد. صف پایتون بسیار شبیه به لیست استاندارد در پایتون است ، اما از نظر عملکرد همیشه بهتر در نظر گرفته می شود.
یادگیری عالی
وبلاگ Great Leaing جدیدترین پیشرفت ها و نوآوری های فناوری را که می تواند برای ایجاد مشاغل پاداش قابل استفاده باشد ، شامل می شود. شما می توانید راهنماهای شغلی ، آموزش های فنی و اخبار صنعت را پیدا کنید تا خود را با دنیای سریع در حال تغییر فناوری و تجارت به روز کنید.< Pan> وارد کردن صف = queue. lifoqueue () que. put (5) روش put () یک عنصر را به صف Lifo اضافه می کند. حذف یک عنصر از صف Lifo: queue queue queue. lifoqueue () que. put (5) remove_item = que. get () چاپ ("مورد حذف شده" ، remove_item)
استراتژی برای تحلیل فاندمنتال...
ما را در سایت استراتژی برای تحلیل فاندمنتال دنبال می کنید
برچسب :
نویسنده : سعید شیخزاده
بازدید : <-PostHit->
تاريخ : جمعه
9 تير
1402 ساعت: 13:53