SlideShare une entreprise Scribd logo
1  sur  37
Дараалал, түүнийг массив
ашиглан зохион байгуулах
         Лекц №12
                    LOGO
Хичээлийн агуулга




Багш: В.Нямсүрэн
Дараалал /Queue/
 Дараалал нь стекийн адил хязгаарлагдмал
  үйлдэлтэй өгөгдлийн бүтэц юм.

 Элемэнт оруулах буюу шинээр элемэнт нэмэх
  үйлдэл нь төгсгөлдөө хийгддэг, элемэнт гаргах
  буюу    устгах үйлдэл нь эхэндээ хийгддэг
  өгөгдлийн бүтэцийг дараалал гэнэ.

 Дараалалыг FIFO /First-In-First-Out/ төрлийн
  жагсаалт ч гэж нэрлэлдэг. Өөрөөр хэлбэл эхэлж
  орсон нь эхэлж гарна гэсэн үг.

Багш: В.Нямсүрэн
Амьдрал дээрх дарааллын жишээ:
Дарааллын          Дарааллын
  төгсгөл            эхлэл
                               Дараагийнх
                                  нь...




                                Төлбөр төлөх




Багш: В.Нямсүрэн
Дарааллын компьютер дэхь жишээ


 Үйлдлийн систем процессууд буюу санах ойд
  ачаалагдсан      програмуудыг     хугацааны
  хуваарилалтаар зохиоцуулан ажиллуулах

 Принтерт хэвлэх файлуудын цуваа




Багш: В.Нямсүрэн
Дарааллыг нэвтрүүлэх


 Дарааллын үндсэн үйлдлүүд болох
   Элемэнт нэмэх буюу оруулах үйлдэл нь
    дарааллын төгсгөлд хийгдэх тул төгсгөлийг
    тодорхойлох rear гэсэн хувьсагч
   Элемэнт устгах буюу гаргах үйлдэл нь
    дарааллын эхэнд хийгдэх тул эхлэлийг
    тодорхойлох    front     гэсэн  хувьсагчийг
    ашиглана.



Багш: В.Нямсүрэн
Дарааллыг нэвтрүүлэх аргууд

     Компьютерийн програмчлалд
     дарааллыг нэвтүүлэхдээ стекийн нэгэн
     адил дараах аргуудыг ашигладаг.


                   Массив ашиглан
                   нэвтрүүлэх

                   Нэг холбоост жагсаалт
                   ашиглан нэвтрүүлэх
Багш: В.Нямсүрэн
Дарааллыг массиваар
илэрхийлэх хийсвэрлэлт
Дарааллын
 өгөгдөл:
            •   Дарааллын өгөгдөл   / *items /
            •   Дарааллын хэмжээ    / MaxQue /
            •   Дарааллын эхлэл     / front /
            •   Дарааллын төгсгөл   / rear /
Дарааллын




            •   Дараалалд элемэнт нэмэх        /Enqueue/
 үйлдэл:




            •   Дарааллаас элемэнт устгах      /Dequeue/
            •   Дараалал хоосон эсэхийг шалгах /Emptyqueue/
            •   Дараалал дүүрсэн эсэхийг шалгах /Fullqueue/
            •   Дарааллын элемэнтүүдийг харах /Viewqueue/


Багш: В.Нямсүрэн
Дарааллыг массиваар
илэрхийлэх хийсвэрлэлт




                   [0]   [1]   [2]      [3]     [4]   [5]
     массив              A     B        C




                                     дараалал




Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх
 Дарааллыг массив ашиглан нэвтрүүлэх үед
  массивын хэмжээгээр дараалалд хадгалагдах
  элемэнтийн тоо хязгаарлагдана. Тиймээс
    Дараалалд элемэнт нэмэх бүртээ дараалал
     дүүрсэн эсэхийг шалгах хэрэгтэй болно.
    Дарааллаас элемэнт устгах бүртээ дараалал
     элемэнттэй эсэхийг шалгана.

 Дараалалд элемэнт нэмэх болон устгахад rear
  болон front хувьсагчдийн утга харгалзан нэг
  нэгээр нэмэгдэнэ.

Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх




Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх
 Тэгвэл

     ямар    үед    дарааллыг
      дүүрсэн байна гэж үзэх
      вэ?
     ямар    үед    дарааллыг
      хоосон байна гэж үзэх вэ?

Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх


             Анхны нөхцөл




             Дарааллаас элемэнт устгав




                   Дараалал хоосон болох тохиолдол


Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх


             Анхны нөхцөл




             Дараалалд элемэнт нэмэв




                   Дараалал дүүрэх тохиолдол


Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх
 Энэ байдлыг шийдэхийн тулд дарааллын эхний
  элемэнтийг хоосоноор тодорхойлно. Ингэснээр
    front==rear үед дараалал хоосон байх нөхцөл
     биелэнэ.
    (rear + 1) % maxQue == front үед дараалал
     дүүрэн байх нөхцөл биелэнэ.




Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх


           Анхны нөхцөл




           Дарааллаас элемэнт устгав




                   Дараалал хоосон байх нөхцөл


Багш: В.Нямсүрэн
Дарааллыг массив
ашиглан нэвтрүүлэх




                   Дараалал дүүрэн байх нөхцөл



Багш: В.Нямсүрэн
Дарааллыг массиваар илэрхийлэх
хийсвэр төрлийг тодорхойлох
class Queue{
  int maxQue, front, rear;
  ItemType* queItems;
public:
  Queue(int max);
  ~Queue();
  void MakeEmpty();
  bool Emptyqueue();
  bool Fullqueue() ;
  void Enqueue(ItemType newItem);
  void Dequeue(ItemType& item);
  void Viewqueue();
};
Багш: В.Нямсүрэн
Дарааллыг үүсгэх
байгуулагч функц:
 Queue::Queue(int max){
   maxQue = max + 1;
   front = maxQue - 1;
   rear = maxQue - 1;
   queItems = new ItemType[maxQue];
 }
 Тайлбар:
 Queue Q(10);
 10 хэмжээтэй Q гэсэн нэртэй дарааллыг үүсгэж
 байна.



Багш: В.Нямсүрэн
Cтекийг үүсгэх
байгуулагч функц:
    MaxQue         11
      front        10
       rear        10
  queItems




                   [0]   [1]   [2]   [3]   [4]   [5]   [6]   [7]   [8]   [9]




Багш: В.Нямсүрэн
Дарааллыг үүсгэх
байгуулагч функц:
                Дараалал үүсгэсэн байна.
              Үүссэн дараалал хоосон байна.




                       Queue.Car(2);
                   Car.Emptyqueue()==true
Багш: В.Нямсүрэн
Дарааллыг санах ойгоос
чөлөөлөх устгагч функц:

  Queue::~Queue(){
    delete [] queItems;
  }




Багш: В.Нямсүрэн
Дарааллыг санах ойгоос
чөлөөлөх устгагч функц:
    MaxQue         11
      front        10
       rear        10
  queItems




                   [0]   [1]   [2]   [3]   [4]   [5]   [6]   [7]   [8]   [9]




Багш: В.Нямсүрэн
Дараалал хоосон
эсэхийг шалгах
 bool Queue::Emptyqueue()
 {
     if (rear == front)
          return true;
     else
          return false;
 }




Багш: В.Нямсүрэн
Дарааллыг үүсгэх
байгуулагч функц:
                   дараалал хоосон байна.




                   Car.Emptyqueue()==true
Багш: В.Нямсүрэн
Дараалал дүүрэн
эсэхийг шалгах
  bool Queue::Fullqueue()
  {
      if((rear + 1) % maxQue == front)
           return true;
      else
           return false;
  }




Багш: В.Нямсүрэн
Дараалал дүүрэн
эсэхийг шалгах




                            Эхлэл     төгсгөл


                   Car.Fullqueue()==true

Багш: В.Нямсүрэн
Дарааллыг хоослох
  void Queue::MakeEmpty()
  {
    front = maxQue - 1;
    rear = maxQue - 1;
  }




Багш: В.Нямсүрэн
Дарааллыг хоослох

             Мөнгө хураагч цайндаа гарахдаа
         Дараалал дахь бүх машинуудыг явуулжээ




                          Эхлэл


                   Car.MakeEmpty();
Багш: В.Нямсүрэн
Дараалалд элемэнт нэмэх
void Queue::Enqueue(ItemType newItem)
{
    if (Fullqueue())
         cout<<"duuren, bolomjgui"<<endl;
    else
    {
         rear = (rear +1) % maxQue;
         queItems[rear] = newItem;
    }

}


Багш: В.Нямсүрэн
Дараалалд элемэнт нэмэх

    MaxQue         11
      front         1                          Q.Enqueue(‘E’);
       rear         3
                    4
  queItems                                       (3+1)%11=4




                   [0]   [1]   [2]   [3]   [4]   [5]   [6]   [7]   [8]   [9]
                               A     G     E




Багш: В.Нямсүрэн
Дараалалд элемэнт нэмэх

               Дараалалд А машин зогслоо.
               Дараалал хоосон биш боллоо.




                               Эхлэл ба төгсгөл
                     Car.Enqueue(A);
Багш: В.Нямсүрэн
Дараалалд элемэнт нэмэх


            Дараалалд B машин нэмэгдэж зогслоо.




                            Эхлэл      төгсгөл


                    Car.Enqueue(B);
Багш: В.Нямсүрэн
Дарааллаас элемэнт устгах
  void Queue::Dequeue(ItemType& item)
  {
      if (Emptyqueue())
           cout<<"hooson,
  bolomjgui"<<endl;
      else
      {
           front = (front + 1) % maxQue;
           item = queItems[front] ;
      }
  }


Багш: В.Нямсүрэн
Дарааллаас элемэнт устгах

    MaxQue         11
      front         2
                    1                          Q.Dequeue(k);
       rear         4                           (1+1)%11=2
  queItems                                         K=‘A’



                   [0]   [1]   [2]   [3]   [4]   [5]   [6]   [7]   [8]   [9]
                               A     G     E




Багш: В.Нямсүрэн
Дарааллаас элемэнт устгах


                   Дарааллаас B машин явлаа.




                                  Эхлэл ба төгсгөл


                        Car.Dequeue(A);
Багш: В.Нямсүрэн
Стекийн элемэнтүүдийг харах
  void Queue::Viewqueue(){
      if(Emptyqueue())
       cout<<"daraalal hooson bna"<<endl;
      else
       for(int i=(front + 1) % maxQue;
                i< (rear +1) % maxQue;i++)
           cout<<queItems[i]<<endl;
  }




Багш: В.Нямсүрэн

Contenu connexe

En vedette

En vedette (10)

Dsi lec14
Dsi lec14Dsi lec14
Dsi lec14
 
Dsi lec2
Dsi lec2Dsi lec2
Dsi lec2
 
Dsi lec3
Dsi lec3Dsi lec3
Dsi lec3
 
Dsi lec4
Dsi lec4Dsi lec4
Dsi lec4
 
Dsi lec5
Dsi lec5Dsi lec5
Dsi lec5
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1
 
Blog ds-tod
Blog ds-todBlog ds-tod
Blog ds-tod
 
Sodko111
Sodko111Sodko111
Sodko111
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
 

Dsi lec12