متن خبر

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

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

صف در php
شناسهٔ خبر: 115094 -




خبرکاو:

با خبرکاو همراه باشید

صف یکی از مهمترین ساختمان داده ها است ، وقتی داده ها به سمت حجیم شدن پیش میروند به کمک مدیریت داده ها می آید و سرعت اجرای دستورات را بالا میبرد مثلا تصور کنید وقتی هزار ایمیل باهم میخواهند ارسال شوند قطعا سیستم دچار کندی و افت کارایی خواهد شد اما همین هزار ایمیل یا هر چیز دیگر را وقتی داخل یک ساختمان داده ی صف کنیم براحتی و بهینه مرتب و آماده ی ارسال میشوند و ترافیک هم ایجاد نمیشود

 

وقتی توسعه ی سیستم به سمت لارج اسکیل میرود داده ها نیز بزرگ و زیاد میشوند و اصلی ترین مشکل موجود مدیریت و هندل کردن همزمان داده هاست خب در این جا چیزی که بداد ما میرسد همین پیاده سازی صف است البته صف انواع مختلف و گوناگونی دارد و در سیستم های بزرگ از سیستم های اپن سورس صف استفاده خواهد شد اما خب ما الان نیاز به سیستم بزرگ داده ای نداریم ، ما در اینجا یک نمونه پیاده سازی  پایه را نشان خواهیم داد که متوجه بشید بیس مفهوم صف در ساختمان داد ها به چه شکل است

 

خب بریم سر پیاده سازی صف ، اول از همه یک کلاس میسازیم بنام 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

کد هارو در اینجا تست کنید

ارسال نظر



ارسال پیامک بلک لیست


تبليغات ايهنا تبليغات ايهنا

طراحی و اجرا مهدی نوروزی -کليه حقوق تعلق دارد به سایت خبرکاو