11.3 Кезек типіндегі құрылыммен жұмыстарды ұйымдастыру
Кезек типіндегі құрылымдар «қайтаруы бар іздеу» алгоритмдерінде кең қолданылады. Графтардың, бұтақтардың төбелерінен өту алгоритмдері «ішіне қарай жүру» алгоритімін жүзеге аIrimshikу кезінде – стектерді немесе «көлденеңінен жүру» алгоритмін жүзеге аIrimshikу кезінде – кезектерді қолданады. Жаппай қызмет көрсету теориясының көптеген есептері оңтайлы нұсқаларды табу үшін кезектерді қолданады.
Кезек типіндегі құрылымның екі тақырыбы болады: ол арқылы кезек элементімен жұмысты орындайтын (элементті жою) кезектің басы және кезекке жаңа элементтерді қосу үшін қолданылатын кезектің соңы. Кезектермен жұмыс жасау үшін C# тілінде арнайы класс (Queue) бөлінген. Бұл кластың әдістер жиыны бар
Queue класында келесі үш конструктор бар:
Public Queue ();
Public Queue (int capacity);
Public Queue (ICollection c);
Бірінші конструктор 10 элементке «бос» кезекті құрайды. Екінші конструктор сиымдылығы capacity элементіне тең «бос» кезекті құрайды. Үшінші конструктор ICollection элементтері арқылы жұмыс жасайтын, n элементке арналған жаңа кезекті құрайды.
Queue класының негізгі әдістері 11.2-кестесінде ұсынылған.
11.2-кесте – Queue класының негізгі әдістері.
Әдіс
|
Сипатама
|
public virtual bool
Contains(object v)
|
True мәнін қайтарылады, егер v объектісі кезекте болса, әйтпесе false мәні қайтарылады.
|
public virtual void Clear()
|
Кезекті тазартады (Count қасиеті – кезек элементтерінің саны нөлге теңестіріледі).
|
public virtual object Peek()
|
Объектті кезектің басынан қайтарады, бірақ оны жоймайды.
|
public virtual object Dequeue()
|
Объектті кезектің басынан қайтарады және оны жояды.
|
public virtual void Enqueue(object v)
|
v объектісін кезек соңына қосады.
|
Кезек әдістерінің жұмысын түсіндіретін мысал келесі есепте қарастырылады:
11.2-есебі. Дүкенге бір күнде 250 адам келеді. Сатып алушыларға қызмет көрсету ретінде мыналар сатылады: нан – ықтималдығы 25%; ірімшік – ықтималдығы 20%; печенье– ықтималдығы 20%; сыра – ықтималдығы 10% және балмұздақ – ықтималдығы 25%. Әрбір сатып алушы тек бір өнімді ғана сатып алады деп есептейік. Барлық оқиғалардың ықтималдықтары 0 – 100 аралығына тең. Сатып алушылар кезегін ұйымдастыру керек, ал оларға қызмет көрсету кезінде әртүрдегі сатылған өнімдердің санын және жиі сатып алынатын өнімді анықтап басып шығару керек.
Есептің шарты бойынша барлық оқиғалардың ықтималдықтары бірдей, сондықтан, егер 0 мен 100 аралығында кездейсоқ санды құрсақ, онда оқиғаның орындалу ықтималдығы берілген диапозон арқылы анықталады. Мысалы, нанды сатып алу ықтималдылығы 1-ден 25-ке дейінгі аралықта анықталады, ал ірімшікті – 26 мен 45, печеньені – 46 мен 65, сыраны – 66 мен 75 және балмұздақты –76 мен 100 аралықтарында анықтайды.
Өнімнің әрбір түрін 0 мен 4-ке дейінгі бүтін сандармен анықтауға болады. Сонымен, сатып алушылар кезегін олар сатып алатын өнімдер кезегімен алмастыруға болады, олар бүтін санмен белгіленеді.
Бағдарлама коды:
using System;
using System.Collections;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static int n;
static void vkl(Queue ocer, int n)
{
ocer.Enqueue(n);
}
static void iskl(Queue ocer)
{
n = (int)ocer.Dequeue();
}
public static void Main()
{
Queue zagol = new Queue();
int[] masi = new int[5];
char[] masc = new char[5] { 'N', 'I', 'P', 'S', 'B' };
string[] mass = new string[5] { "Nan", "Irimshik", "Печенье", "Sira", "Balmuzdak" };
int i, j, p, k;
Random rnd = new Random();
for (i = 0; i < 4; i++) masi[i] = 0;
for (i = 0; i < 250; i++)
{
p = rnd.Next() % 100 + 1;
if (p <= 25) vkl(zagol, 0);
if (25 < p && p <= 45) vkl(zagol, 1);
if (45 < p && p <= 65) vkl(zagol, 2);
if (65 < p && p <= 75) vkl(zagol, 3);
if (p > 75) vkl(zagol, 4);
};
for (i = 0; i < 250; i++)
{
iskl(zagol);
masi[n]++;
Console.Write(masc[n]);
if ((i + 1) % 25 == 0) Console.WriteLine();
};
k = 0; j = 0;
for (i = 0; i < 5; i++)
{
Console.WriteLine(" {0} = {1}", mass[i], masi[i]);
if (k < masi[i]) { k = masi[i]; j = i; }
}
Console.WriteLine("Еn kop satilgan {0} = {1}", mass[j], masi[j]);
Console.WriteLine("Enter pernesin basiniz");
Console.ReadLine();
}
}
}
Бағдарлама жұмысы:
IBIINSBIINNINPINPPNPBSIIP
INNPBPSNNNNNPBSPINSBPSNPP
BBBNNNNIBNNNBINISPBSPPNNB
PPNPNPBSBNNININPBSINIPIPB
IPBBPBBBNBNBINPNPBNPNPBSS
NBBPNBNPSINNBBSNBPPPPPNBB
BPNPBSIPPINPBPBBBPIBNNPBI
PPISPSIPPNBIIIPNNBBSNNBSP
PBSINIPSSPNIIPSBISPINNSSN
NSNIIPNPNBBNIININSIPINSNI
Nan = 68
Irimshik = 45
Pechenie= 58
Sira = 29
Balmuzdak = 50
Еn kop satilgan Nan = 68
Enter pernesin basiniz
Достарыңызбен бөлісу: |