Дараалал, түүнийг массивашиглан зохион байгуулах         Лекц №12                    LOGO
Хичээлийн агуулгаБагш: В.Нямсүрэн
Дараалал /Queue/ Дараалал нь стекийн адил хязгаарлагдмал  үйлдэлтэй өгөгдлийн бүтэц юм. Элемэнт оруулах буюу шинээр элем...
Амьдрал дээрх дарааллын жишээ:Дарааллын          Дарааллын  төгсгөл            эхлэл                               Дарааги...
Дарааллын компьютер дэхь жишээ Үйлдлийн систем процессууд буюу санах ойд  ачаалагдсан      програмуудыг     хугацааны  ху...
Дарааллыг нэвтрүүлэх Дарааллын үндсэн үйлдлүүд болох   Элемэнт нэмэх буюу оруулах үйлдэл нь    дарааллын төгсгөлд хийгдэ...
Дарааллыг нэвтрүүлэх аргууд     Компьютерийн програмчлалд     дарааллыг нэвтүүлэхдээ стекийн нэгэн     адил дараах аргууды...
Дарааллыг массиваарилэрхийлэх хийсвэрлэлтДарааллын өгөгдөл:            •   Дарааллын өгөгдөл   / *items /            •   Д...
Дарааллыг массиваарилэрхийлэх хийсвэрлэлт                   [0]   [1]   [2]      [3]     [4]   [5]     массив             ...
Дарааллыг массивашиглан нэвтрүүлэх Дарааллыг массив ашиглан нэвтрүүлэх үед  массивын хэмжээгээр дараалалд хадгалагдах  эл...
Дарааллыг массивашиглан нэвтрүүлэхБагш: В.Нямсүрэн
Дарааллыг массивашиглан нэвтрүүлэх Тэгвэл     ямар    үед    дарааллыг      дүүрсэн байна гэж үзэх      вэ?     ямар   ...
Дарааллыг массивашиглан нэвтрүүлэх             Анхны нөхцөл             Дарааллаас элемэнт устгав                   Дараал...
Дарааллыг массивашиглан нэвтрүүлэх             Анхны нөхцөл             Дараалалд элемэнт нэмэв                   Дараалал...
Дарааллыг массивашиглан нэвтрүүлэх Энэ байдлыг шийдэхийн тулд дарааллын эхний  элемэнтийг хоосоноор тодорхойлно. Ингэснээ...
Дарааллыг массивашиглан нэвтрүүлэх           Анхны нөхцөл           Дарааллаас элемэнт устгав                   Дараалал х...
Дарааллыг массивашиглан нэвтрүүлэх                   Дараалал дүүрэн байх нөхцөлБагш: В.Нямсүрэн
Дарааллыг массиваар илэрхийлэххийсвэр төрлийг тодорхойлохclass Queue{  int maxQue, front, rear;  ItemType* queItems;public...
Дарааллыг үүсгэхбайгуулагч функц: Queue::Queue(int max){   maxQue = max + 1;   front = maxQue - 1;   rear = maxQue - 1;   ...
Cтекийг үүсгэхбайгуулагч функц:    MaxQue         11      front        10       rear        10  queItems                  ...
Дарааллыг үүсгэхбайгуулагч функц:                Дараалал үүсгэсэн байна.              Үүссэн дараалал хоосон байна.      ...
Дарааллыг санах ойгоосчөлөөлөх устгагч функц:  Queue::~Queue(){    delete [] queItems;  }Багш: В.Нямсүрэн
Дарааллыг санах ойгоосчөлөөлөх устгагч функц:    MaxQue         11      front        10       rear        10  queItems    ...
Дараалал хоосонэсэхийг шалгах bool Queue::Emptyqueue() {     if (rear == front)          return true;     else          re...
Дарааллыг үүсгэхбайгуулагч функц:                   дараалал хоосон байна.                   Car.Emptyqueue()==trueБагш: В...
Дараалал дүүрэнэсэхийг шалгах  bool Queue::Fullqueue()  {      if((rear + 1) % maxQue == front)           return true;    ...
Дараалал дүүрэнэсэхийг шалгах                            Эхлэл     төгсгөл                   Car.Fullqueue()==trueБагш: В....
Дарааллыг хоослох  void Queue::MakeEmpty()  {    front = maxQue - 1;    rear = maxQue - 1;  }Багш: В.Нямсүрэн
Дарааллыг хоослох             Мөнгө хураагч цайндаа гарахдаа         Дараалал дахь бүх машинуудыг явуулжээ                ...
Дараалалд элемэнт нэмэхvoid Queue::Enqueue(ItemType newItem){    if (Fullqueue())         cout<<"duuren, bolomjgui"<<endl;...
Дараалалд элемэнт нэмэх    MaxQue         11      front         1                          Q.Enqueue(‘E’);       rear     ...
Дараалалд элемэнт нэмэх               Дараалалд А машин зогслоо.               Дараалал хоосон биш боллоо.                ...
Дараалалд элемэнт нэмэх            Дараалалд B машин нэмэгдэж зогслоо.                            Эхлэл      төгсгөл      ...
Дарааллаас элемэнт устгах  void Queue::Dequeue(ItemType& item)  {      if (Emptyqueue())           cout<<"hooson,  bolomjg...
Дарааллаас элемэнт устгах    MaxQue         11      front         2                    1                          Q.Dequeu...
Дарааллаас элемэнт устгах                   Дарааллаас B машин явлаа.                                  Эхлэл ба төгсгөл   ...
Стекийн элемэнтүүдийг харах  void Queue::Viewqueue(){      if(Emptyqueue())       cout<<"daraalal hooson bna"<<endl;      ...
Upcoming SlideShare
Loading in …5
×

Dsi lec12

1,894 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,894
On SlideShare
0
From Embeds
0
Number of Embeds
785
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Dsi lec12

  1. 1. Дараалал, түүнийг массивашиглан зохион байгуулах Лекц №12 LOGO
  2. 2. Хичээлийн агуулгаБагш: В.Нямсүрэн
  3. 3. Дараалал /Queue/ Дараалал нь стекийн адил хязгаарлагдмал үйлдэлтэй өгөгдлийн бүтэц юм. Элемэнт оруулах буюу шинээр элемэнт нэмэх үйлдэл нь төгсгөлдөө хийгддэг, элемэнт гаргах буюу устгах үйлдэл нь эхэндээ хийгддэг өгөгдлийн бүтэцийг дараалал гэнэ. Дараалалыг FIFO /First-In-First-Out/ төрлийн жагсаалт ч гэж нэрлэлдэг. Өөрөөр хэлбэл эхэлж орсон нь эхэлж гарна гэсэн үг.Багш: В.Нямсүрэн
  4. 4. Амьдрал дээрх дарааллын жишээ:Дарааллын Дарааллын төгсгөл эхлэл Дараагийнх нь... Төлбөр төлөхБагш: В.Нямсүрэн
  5. 5. Дарааллын компьютер дэхь жишээ Үйлдлийн систем процессууд буюу санах ойд ачаалагдсан програмуудыг хугацааны хуваарилалтаар зохиоцуулан ажиллуулах Принтерт хэвлэх файлуудын цувааБагш: В.Нямсүрэн
  6. 6. Дарааллыг нэвтрүүлэх Дарааллын үндсэн үйлдлүүд болох  Элемэнт нэмэх буюу оруулах үйлдэл нь дарааллын төгсгөлд хийгдэх тул төгсгөлийг тодорхойлох rear гэсэн хувьсагч  Элемэнт устгах буюу гаргах үйлдэл нь дарааллын эхэнд хийгдэх тул эхлэлийг тодорхойлох front гэсэн хувьсагчийг ашиглана.Багш: В.Нямсүрэн
  7. 7. Дарааллыг нэвтрүүлэх аргууд Компьютерийн програмчлалд дарааллыг нэвтүүлэхдээ стекийн нэгэн адил дараах аргуудыг ашигладаг. Массив ашиглан нэвтрүүлэх Нэг холбоост жагсаалт ашиглан нэвтрүүлэхБагш: В.Нямсүрэн
  8. 8. Дарааллыг массиваарилэрхийлэх хийсвэрлэлтДарааллын өгөгдөл: • Дарааллын өгөгдөл / *items / • Дарааллын хэмжээ / MaxQue / • Дарааллын эхлэл / front / • Дарааллын төгсгөл / rear /Дарааллын • Дараалалд элемэнт нэмэх /Enqueue/ үйлдэл: • Дарааллаас элемэнт устгах /Dequeue/ • Дараалал хоосон эсэхийг шалгах /Emptyqueue/ • Дараалал дүүрсэн эсэхийг шалгах /Fullqueue/ • Дарааллын элемэнтүүдийг харах /Viewqueue/Багш: В.Нямсүрэн
  9. 9. Дарааллыг массиваарилэрхийлэх хийсвэрлэлт [0] [1] [2] [3] [4] [5] массив A B C дараалалБагш: В.Нямсүрэн
  10. 10. Дарааллыг массивашиглан нэвтрүүлэх Дарааллыг массив ашиглан нэвтрүүлэх үед массивын хэмжээгээр дараалалд хадгалагдах элемэнтийн тоо хязгаарлагдана. Тиймээс  Дараалалд элемэнт нэмэх бүртээ дараалал дүүрсэн эсэхийг шалгах хэрэгтэй болно.  Дарааллаас элемэнт устгах бүртээ дараалал элемэнттэй эсэхийг шалгана. Дараалалд элемэнт нэмэх болон устгахад rear болон front хувьсагчдийн утга харгалзан нэг нэгээр нэмэгдэнэ.Багш: В.Нямсүрэн
  11. 11. Дарааллыг массивашиглан нэвтрүүлэхБагш: В.Нямсүрэн
  12. 12. Дарааллыг массивашиглан нэвтрүүлэх Тэгвэл  ямар үед дарааллыг дүүрсэн байна гэж үзэх вэ?  ямар үед дарааллыг хоосон байна гэж үзэх вэ?Багш: В.Нямсүрэн
  13. 13. Дарааллыг массивашиглан нэвтрүүлэх Анхны нөхцөл Дарааллаас элемэнт устгав Дараалал хоосон болох тохиолдолБагш: В.Нямсүрэн
  14. 14. Дарааллыг массивашиглан нэвтрүүлэх Анхны нөхцөл Дараалалд элемэнт нэмэв Дараалал дүүрэх тохиолдолБагш: В.Нямсүрэн
  15. 15. Дарааллыг массивашиглан нэвтрүүлэх Энэ байдлыг шийдэхийн тулд дарааллын эхний элемэнтийг хоосоноор тодорхойлно. Ингэснээр  front==rear үед дараалал хоосон байх нөхцөл биелэнэ.  (rear + 1) % maxQue == front үед дараалал дүүрэн байх нөхцөл биелэнэ.Багш: В.Нямсүрэн
  16. 16. Дарааллыг массивашиглан нэвтрүүлэх Анхны нөхцөл Дарааллаас элемэнт устгав Дараалал хоосон байх нөхцөлБагш: В.Нямсүрэн
  17. 17. Дарааллыг массивашиглан нэвтрүүлэх Дараалал дүүрэн байх нөхцөлБагш: В.Нямсүрэн
  18. 18. Дарааллыг массиваар илэрхийлэххийсвэр төрлийг тодорхойлох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();};Багш: В.Нямсүрэн
  19. 19. Дарааллыг үүсгэхбайгуулагч функц: Queue::Queue(int max){ maxQue = max + 1; front = maxQue - 1; rear = maxQue - 1; queItems = new ItemType[maxQue]; } Тайлбар: Queue Q(10); 10 хэмжээтэй Q гэсэн нэртэй дарааллыг үүсгэж байна.Багш: В.Нямсүрэн
  20. 20. Cтекийг үүсгэхбайгуулагч функц: MaxQue 11 front 10 rear 10 queItems [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]Багш: В.Нямсүрэн
  21. 21. Дарааллыг үүсгэхбайгуулагч функц: Дараалал үүсгэсэн байна. Үүссэн дараалал хоосон байна. Queue.Car(2); Car.Emptyqueue()==trueБагш: В.Нямсүрэн
  22. 22. Дарааллыг санах ойгоосчөлөөлөх устгагч функц: Queue::~Queue(){ delete [] queItems; }Багш: В.Нямсүрэн
  23. 23. Дарааллыг санах ойгоосчөлөөлөх устгагч функц: MaxQue 11 front 10 rear 10 queItems [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]Багш: В.Нямсүрэн
  24. 24. Дараалал хоосонэсэхийг шалгах bool Queue::Emptyqueue() { if (rear == front) return true; else return false; }Багш: В.Нямсүрэн
  25. 25. Дарааллыг үүсгэхбайгуулагч функц: дараалал хоосон байна. Car.Emptyqueue()==trueБагш: В.Нямсүрэн
  26. 26. Дараалал дүүрэнэсэхийг шалгах bool Queue::Fullqueue() { if((rear + 1) % maxQue == front) return true; else return false; }Багш: В.Нямсүрэн
  27. 27. Дараалал дүүрэнэсэхийг шалгах Эхлэл төгсгөл Car.Fullqueue()==trueБагш: В.Нямсүрэн
  28. 28. Дарааллыг хоослох void Queue::MakeEmpty() { front = maxQue - 1; rear = maxQue - 1; }Багш: В.Нямсүрэн
  29. 29. Дарааллыг хоослох Мөнгө хураагч цайндаа гарахдаа Дараалал дахь бүх машинуудыг явуулжээ Эхлэл Car.MakeEmpty();Багш: В.Нямсүрэн
  30. 30. Дараалалд элемэнт нэмэхvoid Queue::Enqueue(ItemType newItem){ if (Fullqueue()) cout<<"duuren, bolomjgui"<<endl; else { rear = (rear +1) % maxQue; queItems[rear] = newItem; }}Багш: В.Нямсүрэн
  31. 31. Дараалалд элемэнт нэмэх 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Багш: В.Нямсүрэн
  32. 32. Дараалалд элемэнт нэмэх Дараалалд А машин зогслоо. Дараалал хоосон биш боллоо. Эхлэл ба төгсгөл Car.Enqueue(A);Багш: В.Нямсүрэн
  33. 33. Дараалалд элемэнт нэмэх Дараалалд B машин нэмэгдэж зогслоо. Эхлэл төгсгөл Car.Enqueue(B);Багш: В.Нямсүрэн
  34. 34. Дарааллаас элемэнт устгах void Queue::Dequeue(ItemType& item) { if (Emptyqueue()) cout<<"hooson, bolomjgui"<<endl; else { front = (front + 1) % maxQue; item = queItems[front] ; } }Багш: В.Нямсүрэн
  35. 35. Дарааллаас элемэнт устгах 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Багш: В.Нямсүрэн
  36. 36. Дарааллаас элемэнт устгах Дарааллаас B машин явлаа. Эхлэл ба төгсгөл Car.Dequeue(A);Багш: В.Нямсүрэн
  37. 37. Стекийн элемэнтүүдийг харах 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; }Багш: В.Нямсүрэн

×