صف ها معمولا در زندگی واقعی خسته کننده هستند، اما در یک برنامه کامپیوتری می توانند بسیاری از مشکلات را حل کنند. دریابید که با یک صف چه کاری می توانید انجام دهید و چگونه.
صف یک ساختار داده همه کاره است که می توانید در تنظیمات مختلف از آن استفاده کنید. از الگوریتمهای زمانبندی CPU گرفته تا برنامههای وب، در همه جا یافت میشود.
اگر میخواهید یک توسعهدهنده پایتون باشید، بسیار مهم است که با این ساختار دادهای ساده و در عین حال همهجانبه به سرعت برسید. بیایید بیاموزیم که ساختار داده صف چیست و چگونه آن را در پایتون پیاده سازی کنیم.
ساختار داده صف چیست؟
صف یک ساختار داده خطی است که از اصل First-In-First-Out (FIFO) پیروی می کند. این بدان معناست که وقتی عنصری را از یک صف واکشی میکنید، هر کدام را که قبل از بقیه اضافه کردهاید، دریافت میکنید.
در اینجا عملیات اساسی که می توانید در یک صف انجام دهید آمده است:
- Enqueue: عناصر را به صف اضافه کنید.
- Dequeue: حذف عناصر از صف.
- چاپ: عناصر موجود در صف را چاپ کنید.
- Front: عنصر را در جلوی صف دریافت کنید.
- Rear: عنصر را در پشت صف دریافت کنید.
میتوانید ساختار دادههای صف را در پایتون به دو صورت پیادهسازی کنید: با استفاده از یک ظرف فهرست یا یک صف دو طرفه از ماژول مجموعهها. برای این برنامه، از یک لیست استفاده خواهید کرد.
نحوه پیاده سازی ساختار داده صف در پایتون
شما با استفاده از کانتینر لیست در پایتون یک صف را پیاده سازی خواهید کرد. با اعلام یک لیست خالی با صف نام شروع کنید.
queue = []
اکنون باید ورودی کاربر را بپذیرید و عملیات وارد شده توسط کاربر را انجام دهید. ابتدا خطی را چاپ کنید که از کاربر می خواهد دستوری را وارد کند. سپس منتظر ورودی کاربر باشید و آن را در متغیر فرمان ذخیره کنید.
با استفاده از دستورات Python if، عملیات مربوط به دستوری را که کاربر وارد می کند انجام دهید. اگر دستور ناشناخته ای را وارد کردند، برنامه را ترک کنید. این عملیات را در یک حلقه while بی نهایت قرار دهید تا مطمئن شوید که برنامه همچنان در حال اجرا است مگر اینکه آنها را ترک کنند.
while True:
command = input("What do you want to do? ")
if command == "enqueue":
# code
elif command == "dequeue":
# code
else:
break
print(queue)
نوبت دهی
اکنون که با جریان کنترل اصلی برنامه سروکار دارید، می توانید بلوک کد را برای هر عملیات تعریف کنید. ابتدا کد enqueue را بنویسید. Enqueue به معنای درج یک عنصر در انتهای صف است. می توانید این کار را با استفاده از متد append() انجام دهید:
if command == "enqueue":
enqueue = int(input("Enter the element to Enqueue: "))
Dequeue
اکنون، کدی را بنویسید تا یک عنصر از صف حذف شود. می توانید این کار را با استفاده از روش pop با 0 به عنوان شاخص انجام دهید. چرا؟ همانطور که قبلاً آموختید، یک صف از ترتیب FIFO پیروی می کند، بنابراین اولین عنصری که در صف قرار می دهید باید اولین عنصری باشد که در صف قرار می دهید.
if command == "dequeue":
queue.pop(0)
جلو
در ادامه، کدی را برای چاپ عنصر در جلوی صف بنویسید. به سادگی شاخص صفر صف را چاپ کنید.
if command == "front":
print(queue[0])
عقب
بسیار شبیه کد عملیات جلو، برای انجام عملیات عقب، عنصر را در آخرین فهرست چاپ کنید. برای انجام این کار ابتدا از تابع len() در صف استفاده کنید و سپس 1 را از آن کم کنید تا آخرین شاخص را پیدا کنید.
if command == "rear":
print(queue[len(queue) - 1])
چاپ
در نهایت کد دستور print را بنویسید. به سادگی لیست را با استفاده از تابع print() استاندارد پایتون چاپ کنید.
if command == "print":
print(queue)
اگر متنی که کاربر وارد می کند با دستور پشتیبانی شده مطابقت ندارد، با استفاده از دستور break از حلقه while خارج شوید. کد نهایی باید به شکل زیر باشد:
queue = []
while True:
command = input("What do you want to do?\n")
if command == "enqueue":
enqueue = int(input("Enter the element to Enqueue: "))
queue.append(enqueue)
elif command == "dequeue":
queue.pop(0)
elif command == "print":
print(queue)
elif command == "front":
print(queue[0])
elif command == "rear":
print(queue[len(queue)-1])
else:
break
print(queue)
برنامه را اجرا کنید تا عملیات های مختلف صف را امتحان کنید. از دستور print استفاده کنید تا ببینید چگونه روی صف شما تأثیر می گذارد. شما اکنون اجرای صف ساده خود را در پایتون ایجاد کرده اید.
صف تنها یکی از بسیاری از ساختارهای داده مفید است
مفهوم ساختار داده یک مفهوم حیاتی است که هر دانشجوی علوم کامپیوتر باید به آن تسلط داشته باشد. به احتمال زیاد ممکن است قبلاً برخی از ساختارهای داده اولیه مانند آرایه ها یا لیست ها را یاد گرفته باشید یا با آنها کار کرده باشید.
مصاحبهکنندگان همچنین تمایل دارند سوالاتی در رابطه با ساختار داده بپرسند، بنابراین اگر به دنبال یک شغل برنامهنویسی پردرآمد هستید، باید دانش خود را در مورد ساختار دادهها تقویت کنید.