پیاده سازی ساختمان داده صف در php

صف یکی از مهمترین ساختمان داده ها است ، وقتی داده ها به سمت حجیم شدن پیش میروند به کمک مدیریت داده ها می آید و سرعت اجرای دستورات را بالا میبرد مثلا تصور کنید وقتی هزار ایمیل باهم میخواهند ارسال شوند قطعا سیستم دچار کندی و افت کارایی خواهد شد اما همین هزار ایمیل یا هر چیز دیگر را وقتی داخل یک ساختمان داده ی صف کنیم براحتی و بهینه مرتب و آماده ی ارسال میشوند و ترافیک هم ایجاد نمیشود
وقتی توسعه ی سیستم به سمت لارج اسکیل میرود داده ها نیز بزرگ و زیاد میشوند و اصلی ترین مشکل موجود مدیریت و هندل کردن همزمان داده هاست خب در این جا چیزی که بداد ما میرسد همین پیاده سازی صف است البته صف انواع مختلف و گوناگونی دارد و در سیستم های بزرگ از سیستم های اپن سورس صف استفاده خواهد شد اما خب ما الان نیاز به سیستم بزرگ داده ای نداریم ، ما در اینجا یک نمونه پیاده سازی پایه را نشان خواهیم داد که متوجه بشید بیس مفهوم صف در ساختمان داد ها به چه شکل است
خب بریم سر پیاده سازی صف ، اول از همه یک کلاس میسازیم بنام Element این کلاس دو متغیر دارد بنام های value و next همین این کلاس را ذخیره کنید همانند زیر :
class Element{ public $value; public $next; }
این کلاس در واقع کلاس بیس ماست که دیگر متغیر ها داخلش نگهداری میشوند
اما کلاس اصلی ما ،این کلاس نامش هست Queue این کلاس تمام متد ها و متغیر های لازم را دارد از طریق این کلاس ما از کلاس element شی میسازیم و داده هارا درونش نگهداری میکنیم
class Queue{ private $font = null; private $back = null; /** * Check whether the queue is empty or not * @return boolean * public function isEmpty(){ return false; } //stub */ public function isEmpty(){ return $this->font == null; } /** * Insert element at the back of queue * @param $value * public function enqueue($value){} //stub */ public function enqueue($value){ $oldBack = $this->back; $this->back = new Element(); $this->back->value = $value; if($this->isEmpty()){ $this->font = $this->back; }else{ $oldBack->next = $this->back; } } /** * Remove element from the font of queue * @return $value * public function dequeue(){ return 0; } //stub */ public function dequeue(){ if($this->isEmpty()){ return null; } $removedValue = $this->font->value; $this->font = $this->font->next; return $removedValue; } }
این کلاس شامل متغیر های front یا فونت و back و همچنین متد enqueue برای اضافه کردن داده به صف و متد dequeue برای گرفتن داده از صف و سپس حذف آن است یعنی هر عنصر رو بعد از خواندن از صف حذف و خارج میکند
متد دیگری وجود دارد تحت عنوان isEmpty خب این متد کار اصلیش اینه که چک کنه که آیا صف خالی است ؟ یا پر است؟ در صورت خالی بودن true برمیگرداند و در غیر اینصورت false
همونطور که مشاهده میکنید از این متد برای ولیدیت کردن عقب و جلو داده ها استفاده میکنیم
در آخر هم کدی که در دسترس مشتری یا همون کلاینت قرار میگیره تا ازش نمونه ایجاد کنه و استفاده کنه به این صورت در می آید :
$queue = new Queue(); $queue->enqueue("start"); $queue->enqueue(1); $queue->enqueue(2); $queue->enqueue(3); $queue->enqueue(4); $queue->enqueue("End"); while(!$queue->isEmpty()){ echo $queue->dequeue()."\n"; }
اگر این کد را اجرا کنید خواهید دید نتیجه به صورت زیر خواهد شد:
start 1 2 3 4 End
ارسال نظر