|
|
|||
|
wm-help.net -> Ýëåêòðîííàÿ áèáëèîòåêà -> Pascal -> Pascal. Êóðñ ëåêöèé. -> 39. Î÷åðåäè39. Î÷åðåäè
39. Î÷åðåäè
Î÷åðåäüþ íàçûâàåòñÿ äèíàìè÷åñêàÿ ñòðóêòóðà äàííûõ, äîáàâëåíèå êîì- ïîíåíòû â êîòîðóþ ïðîèçâîäèòñÿ â îäèí êîíåö, à âûáîðêà îñóùåñòâëÿåòñÿ ñ äðóãîãî êîíöà. Î÷åðåäü ðàáîòàåò ïî ïðèíöèïó:
FIFO (First-In, First-Out) -
ïîñòóïèâøèé ïåðâûì, îáñëóæèâàåòñÿ ïåðâûì. Äëÿ ôîðìèðîâàíèÿ î÷åðåäè è ðàáîòû ñ íåé íåîáõîäèìî èìåòü òðè ïåðå- ìåííûå òèïà óêàçàòåëü, ïåðâàÿ èç êîòîðûõ îïðåäåëÿåò íà÷àëî î÷åðåäè, âòîðàÿ - êîíåö î÷åðåäè, òðåòüÿ - âñïîìîãàòåëüíàÿ. Îïèñàíèå êîìïîíåíòû î÷åðåäè è ïåðåìåííûõ òèïà óêàçàòåëü äàäèì ñëå- äóþùèì îáðàçîì:
type PComp=^Comp; Comp=record D:T; pNext:PComp end; var pBegin, pEnd, pAux: PComp;
ãäå pBegin - óêàçàòåëü íà÷àëà î÷åðåäè, pEnd - óêàçàòåëü êîíöà î÷åðå- äè, pAux - âñïîìîãàòåëüíûé óêàçàòåëü. Òèï Ò îïðåäåëÿåò òèï äàííûõ êîìïîíåíòû î÷åðåäè. Íà÷àëüíîå ôîðìèðîâàíèå î÷åðåäè âûïîëíÿåòñÿ ñëåäóþùèìè îïåðàòîðàìè:
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» New(pBegin); º *ÄĺÄÄÄ¿ º º º º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ pBegin ÀÄÄ>º º pEnd ÈÍÍÍÍͼ
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» pBegin^.pNext:=NIL; º *ÄĺÄÄÄ¿ º º º º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ pBegin ÀÄÄ>º NIL º pEnd ÈÍÍÍÍͼ
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» pBegin^.D:=D1; º *ÄĺÄÄÄ¿ º D1 º º º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ pBegin ÀÄÄ>º NIL º pEnd ÈÍÍÍÍͼ
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» pEnd:=pBegin; º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º NIL º<ÄÄÙ pEnd ÈÍÍÍÍͼ
Äîáàâëåíèå êîìïîíåíòû â î÷åðåäü ïðîèçâîäèòñÿ â êîíåö î÷åðåäè:
New(pAux);
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º º º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º NIL º<ÄÄÙ pEnd º º<ÄÄÙ pAux ÈÍÍÍÍͼ ÈÍÍÍÍͼ
pAux^.pNext:=NIL;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º º º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º NIL º<ÄÄÙ pEnd º NIL º<ÄÄÙ pAux ÈÍÍÍÍͼ ÈÍÍÍÍͼ pBegin^.pNext:=pAux;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º ÚÄÄĺÄÄ* º º º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º * º<ÄÄÙ pEnd º NIL º<ÄÄÙ pAux ÈÍÍÍÍͼ ÈÍÍÍÍͼ ³ ^ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ pEnd:=pAux;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º º *ÄĺÄÄÄ¿ º º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º * º pEnd ÀÄÄ>º NIL º<ÄÄÙ pAux ÈÍÍÍÍͼ ÈÍÍÍÍͼ ³ ^ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
pEnd^.D:=D2;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º º D2 º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º *ÄĺÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>º NIL º<ÄÄÙ pEnd ÈÍÍÍÍͼ ÈÍÍÍÍͼ
Äîáàâëåíèå ïîñëåäóþùèõ êîìïîíåíò ïðîèçâîäèòñÿ àíàëîãè÷íî.
Âûáîðêà êîìïîíåíòû èç î÷åðåäè îñóùåñòâëÿåòñÿ èç íà÷àëà î÷åðåäè, îäíîâðåìåííî êîìïîíåíòà èñêëþ÷àåòñÿ èç î÷åðåäè. Ïóñòü â ïàìÿòè ÝÂÌ ñôîðìèðîâàíà î÷åðåäü, ñîñòîÿùàÿ èç òðåõ ýëåìåíòîâ:
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º º D2 º º D3 º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ºÍÍÍÍͺ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ÀÄÄ>º *ÄĺÄÄÄÄÄÄ>º *ÄĺÄÄÄÄÄÄ>º NIL º<ÄÄÙ pEnd ÈÍÍÍÍͼ ÈÍÍÍÍͼ ÈÍÍÍÍͼ
Âûáîðêà êîìïîíåíòû âûïîëíÿåòñÿ ñëåäóþùèìè îïåðàòîðàìè:
D1:=pBegin^.D; pBegin:=pBegin^.pNext;
ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» ÉÍÍÍÍÍ» º *ÄĺÄÄÄ¿ º D1 º º D2 º º D3 º ÚÄÄĺÄÄ* º ÈÍÍÍÍͼ ³ ºÍÍÍÍͺ ºÍÍÍÍͺ ºÍÍÍÍͺ ³ ÈÍÍÍÍͼ pBegin ³ º º ÚÄÄ>º *ÄĺÄÄÄÄÄÄ>º NIL º<ÄÄÙ pEnd ³ ÈÍÍÍÍͼ ³ ÈÍÍÍÍͼ ÈÍÍÍÍͼ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ïðèìåð. Ñîñòàâèòü ïðîãðàììó, êîòîðàÿ ôîðìèðóåò î÷åðåäü, äîáàâëÿåò â íåå ïðîèçâîëüíîå êîëè÷åñòâî êîìïîíåíò, à çàòåì ÷èòàåò âñå êîìïîíåí- òû è âûâîäèò èõ íà ýêðàí äèñïëåÿ.  êà÷åñòâå äàííûõ âçÿòü ñòðîêó ñèì- âîëîâ. Ââîä äàííûõ - ñ êëàâèàòóðû äèñïëåÿ, ïðèçíàê êîíöà ââîäà - ñòðîêà ñèìâîëîâ END.
Program QUEUE; uses Crt; type Alfa= String[10]; PComp= ^Comp; Comp= record sD:Alfa; pNext:PComp end; var pBegin, pEnd: PComp; sC: Alfa; Procedure CreateQueue(var pBegin,pEnd: PComp; var sC: Alfa); begin New(pBegin); pBegin^.pNext:=NIL; pBegin^.sD:=sC; pEnd:=pBegin end; Procedure AddQueue(var pEnd:PComp; var sC:Alfa); var pAux: PComp; begin New(pAux); pAux^.pNext:=NIL; pEnd^.pNext:=pAux; pEnd:=pAux; pEnd^.sD:=sC end; Procedure DelQueue(var pBegin: PComp; var sC: Alfa); begin sC:=pBegin^.sD; pBegin:=pBegin^.pNext end; begin Clrscr; writeln(' ÂÂÅÄÈ ÑÒÐÎÊÓ '); readln(sC); CreateQueue(pBegin,pEnd,sC); repeat writeln(' ÂÂÅÄÈ ÑÒÐÎÊÓ '); readln(sC); AddQueue(pEnd,sC) until sC='END'; writeln(' ***** ÂÛÂÎÄ ÐÅÇÓËÜÒÀÒÎÂ *****'); repeat DelQueue(pBegin,sC); writeln(sC); until pBegin=NIL end.
|
|
| áîäèáèëäèíã | Ñòðîèì Äîìèê | RU-äîìåíû çà 170 ðóáëåé | Copyright © " ïîìîùü Âåá-Ìàñòåðó" (Alexander D. Belyaev) 2005-2008. Ïðè ïåðåïå÷àòêå ëþáîãî ìàòåðèàëà âèäèìàÿ ññûëêà íà èñòî÷íèê " ïîìîùü Âåá-Ìàñòåðó" è âñå èìåíà, ññûëêè àâòîðîâ îáÿçàòåëüíû! Âðåìÿ ãåíåðàöèè ñòðàíèöû: 0.080 |