Coză ciclică

În studiul din exemplul anterior programul de întâlniri de programare este probabil în minte ar putea veni drumul de lângă îmbunătăți: atunci când sfârșitul matrice, care stochează toate, nu se poate opri programul și a stabilit indicele de inserție (SPOS) și extracție (rpos), astfel încât acestea au indicat începutul matricei. Aceasta va permite plasarea oricărui număr de elemente în coadă, cu condiția ca acestea să fie extrase în mod corespunzător. O astfel de realizare a unei coadă se numește coadă ciclică. deoarece matricea este folosită ca și cum nu ar fi o listă liniară, ci un inel.






Pentru a organiza o coadă ciclică în programator, funcțiile qstore () și qretrieve () trebuie rescrise după cum urmează:

În această versiune toate supraîncărcate atunci când înregistrați indexul este imediat înainte de extragerea indicelui; în caz contrar, există încă loc pentru introducerea evenimentului. Coada de așteptare este goală atunci când rpos este egal cu spații.

Probabil, cele mai multe ori cozile ciclice sunt folosite în sistemele de operare pentru a stoca informații care sunt luate în considerare și scrise pe fișierele pe disc sau pe consola. Ciclurile ciclice sunt, de asemenea, utilizate în programele de procesare în timp real, care trebuie să continue să proceseze informații, tamponând cererile I / O. Mulți procesatori de texte utilizează această tehnică în timpul reformatării alineatelor sau alinierii liniei. Textul pe care îl introduceți nu este afișat pe ecran până când procesul nu este complet. Pentru a face acest lucru, aplicația trebuie să verifice dacă apăsați tasta în timp ce executați o altă sarcină. Dacă a fost apăsată orice tastă, caracterul introdus este plasat rapid în coadă și procesul continuă. După finalizare, caracterele sunt extrase din coadă.






Pentru a experimenta în practică această aplicare a cozilor ciclice, să luăm în considerare un program simplu compus din două procese. Primul proces din program afișează numere de la 1 la 32 000. Cel de-al doilea proces pune caracterele în coadă în timp ce sunt introduse, nu le afișează pe ecran până când utilizatorul apasă . Caracterele de intrare nu sunt afișate, deoarece primul proces are prioritate în ceea ce privește ieșirea pe ecran. După ce faceți clic caracterele din coadă sunt extrase și imprimate.

Programul de muncă, așa cum este descris mai sus, este necesar să se utilizeze două funcții care nu sunt definite în limbajul C standard: _kbhit () și _getch (). _kbhit () întoarce true dacă cheia a fost apăsat pe tastatură; în caz contrar, returnează FALSE. Funcția _getch () citește caractere de intrare, dar nu-l duplicat pe ecran. Limbajul C standard nu oferă o funcție pentru a verifica starea tastaturii sau a caracterului cititorului fără afișajul de pe ecran, deoarece aceste caracteristici depind de sistemul de operare. Cu toate acestea, majoritatea bibliotecilor de compilatoare au funcții care efectuează date despre sarcini. Programul mic prezentat aici este compilat folosind compilatorul Microsoft.







Articole similare

Trimiteți-le prietenilor: