Dsi lec12
- 3. Дараалал /Queue/
Дараалал нь стекийн адил хязгаарлагдмал
үйлдэлтэй өгөгдлийн бүтэц юм.
Элемэнт оруулах буюу шинээр элемэнт нэмэх
үйлдэл нь төгсгөлдөө хийгддэг, элемэнт гаргах
буюу устгах үйлдэл нь эхэндээ хийгддэг
өгөгдлийн бүтэцийг дараалал гэнэ.
Дараалалыг FIFO /First-In-First-Out/ төрлийн
жагсаалт ч гэж нэрлэлдэг. Өөрөөр хэлбэл эхэлж
орсон нь эхэлж гарна гэсэн үг.
Багш: В.Нямсүрэн
- 5. Дарааллын компьютер дэхь жишээ
Үйлдлийн систем процессууд буюу санах ойд
ачаалагдсан програмуудыг хугацааны
хуваарилалтаар зохиоцуулан ажиллуулах
Принтерт хэвлэх файлуудын цуваа
Багш: В.Нямсүрэн
- 6. Дарааллыг нэвтрүүлэх
Дарааллын үндсэн үйлдлүүд болох
Элемэнт нэмэх буюу оруулах үйлдэл нь
дарааллын төгсгөлд хийгдэх тул төгсгөлийг
тодорхойлох rear гэсэн хувьсагч
Элемэнт устгах буюу гаргах үйлдэл нь
дарааллын эхэнд хийгдэх тул эхлэлийг
тодорхойлох front гэсэн хувьсагчийг
ашиглана.
Багш: В.Нямсүрэн
- 7. Дарааллыг нэвтрүүлэх аргууд
Компьютерийн програмчлалд
дарааллыг нэвтүүлэхдээ стекийн нэгэн
адил дараах аргуудыг ашигладаг.
Массив ашиглан
нэвтрүүлэх
Нэг холбоост жагсаалт
ашиглан нэвтрүүлэх
Багш: В.Нямсүрэн
- 8. Дарааллыг массиваар
илэрхийлэх хийсвэрлэлт
Дарааллын
өгөгдөл:
• Дарааллын өгөгдөл / *items /
• Дарааллын хэмжээ / MaxQue /
• Дарааллын эхлэл / front /
• Дарааллын төгсгөл / rear /
Дарааллын
• Дараалалд элемэнт нэмэх /Enqueue/
үйлдэл:
• Дарааллаас элемэнт устгах /Dequeue/
• Дараалал хоосон эсэхийг шалгах /Emptyqueue/
• Дараалал дүүрсэн эсэхийг шалгах /Fullqueue/
• Дарааллын элемэнтүүдийг харах /Viewqueue/
Багш: В.Нямсүрэн
- 10. Дарааллыг массив
ашиглан нэвтрүүлэх
Дарааллыг массив ашиглан нэвтрүүлэх үед
массивын хэмжээгээр дараалалд хадгалагдах
элемэнтийн тоо хязгаарлагдана. Тиймээс
Дараалалд элемэнт нэмэх бүртээ дараалал
дүүрсэн эсэхийг шалгах хэрэгтэй болно.
Дарааллаас элемэнт устгах бүртээ дараалал
элемэнттэй эсэхийг шалгана.
Дараалалд элемэнт нэмэх болон устгахад rear
болон front хувьсагчдийн утга харгалзан нэг
нэгээр нэмэгдэнэ.
Багш: В.Нямсүрэн
- 15. Дарааллыг массив
ашиглан нэвтрүүлэх
Энэ байдлыг шийдэхийн тулд дарааллын эхний
элемэнтийг хоосоноор тодорхойлно. Ингэснээр
front==rear үед дараалал хоосон байх нөхцөл
биелэнэ.
(rear + 1) % maxQue == front үед дараалал
дүүрэн байх нөхцөл биелэнэ.
Багш: В.Нямсүрэн
- 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. Дарааллыг үүсгэх
байгуулагч функц:
Queue::Queue(int max){
maxQue = max + 1;
front = maxQue - 1;
rear = maxQue - 1;
queItems = new ItemType[maxQue];
}
Тайлбар:
Queue Q(10);
10 хэмжээтэй Q гэсэн нэртэй дарааллыг үүсгэж
байна.
Багш: В.Нямсүрэн
- 28. Дарааллыг хоослох
void Queue::MakeEmpty()
{
front = maxQue - 1;
rear = maxQue - 1;
}
Багш: В.Нямсүрэн
- 29. Дарааллыг хоослох
Мөнгө хураагч цайндаа гарахдаа
Дараалал дахь бүх машинуудыг явуулжээ
Эхлэл
Car.MakeEmpty();
Багш: В.Нямсүрэн
- 30. Дараалалд элемэнт нэмэх
void Queue::Enqueue(ItemType newItem)
{
if (Fullqueue())
cout<<"duuren, bolomjgui"<<endl;
else
{
rear = (rear +1) % maxQue;
queItems[rear] = newItem;
}
}
Багш: В.Нямсүрэн
- 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. Дараалалд элемэнт нэмэх
Дараалалд А машин зогслоо.
Дараалал хоосон биш боллоо.
Эхлэл ба төгсгөл
Car.Enqueue(A);
Багш: В.Нямсүрэн
- 34. Дарааллаас элемэнт устгах
void Queue::Dequeue(ItemType& item)
{
if (Emptyqueue())
cout<<"hooson,
bolomjgui"<<endl;
else
{
front = (front + 1) % maxQue;
item = queItems[front] ;
}
}
Багш: В.Нямсүрэн
- 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
Багш: В.Нямсүрэн
- 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;
}
Багш: В.Нямсүрэн