Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** Fie un sistem de gestionare a unor cozi de mesaje. Un mesaj este caracterizat printr-un
- -ID (intreg),
- -o prioritate (intreg) și
- -mesajul propriu zis (șir de caractere).
- Să se scrie și sa se implementeze un planificator pentru deservirea mesajelor
- bazat pe o structura de tip multilistă. Structura multilistă va conține o
- listă ordonată de categorii de priorități implementată dinamic,
- și fiecare categorie va avea o coadă circulară de maxim 10 elemente,
- implementată static, pentru retinerea mesajelor din acea categorie.
- Sa se implementeze următoarele funcționalități:
- - Adăugare categorie de priorități (se va adăuga o categorie nouă, menținând lista ordonată)
- - Adăugare mesaj (se va adaugă un mesaj in coada corespunzătoare priorității sale)
- - Deservire mesaj (se va scoate cel mai vechi mesaj din cea mai prioritara categorie a cărei cozi nu este goala) **/
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- typedef enum{false, true}Boolean;
- typedef struct Mesaj{
- int ID;
- int prioritate;
- char mesaj[100];
- struct Mesaj *nextMsj;
- }Mesaj;
- typedef struct Categorie{
- int prioritate;
- struct Categorie *next;
- struct Mesaj *startMsj;
- }Categorie;
- Categorie *start;
- /** adaugare mesaj**/
- void adaugareMesaj()
- {
- Categorie *poz = start;
- Mesaj *q, *pozMsj;
- q = (Mesaj*)malloc(sizeof(Mesaj));
- printf("\tPrioritate: "); scanf("%d", &q->prioritate);
- printf("\tID: "); scanf("%d", &q->ID);
- // printf("\tMesaj: "); fgets(q->mesaj, 100, stdin);
- while (poz!=NULL)
- {
- if (poz->prioritate == q->prioritate)
- {
- pozMsj = poz->startMsj;
- break;
- }
- else poz = poz->next;
- }
- if(pozMsj == NULL)
- {
- q->nextMsj = NULL;
- poz->startMsj = q;
- }
- else
- while(pozMsj != NULL)
- {
- if(pozMsj->nextMsj == NULL)
- {
- pozMsj->nextMsj = q;
- break;
- }
- }
- }
- void adaugareCategorie()
- {
- Categorie *poz = start, *q;
- q = (Categorie*)malloc(sizeof(Categorie));
- printf("\tPrioritate: "); scanf("%d", &q->prioritate);
- q->startMsj = NULL;
- if((start == NULL) || (poz->prioritate > q->prioritate))
- {
- q->next = start;
- start = q;
- }
- else
- while(poz!= NULL)
- {
- if ((poz->next == NULL) || (poz->next->prioritate > q->prioritate))
- {
- q->next = poz->next;
- poz->next = q;
- break;
- }
- else
- poz=poz->next;
- }
- }
- /** Afisari**/
- void afisareMesaje(Categorie *q)
- {
- Mesaj *poz = q->startMsj;
- if(poz == NULL)
- printf("\tNu exista mesaje cu acesta prioritate\n");
- else
- while(poz != NULL)
- {
- printf("\tPrioritate:%d // ID:%d\n", poz->prioritate, poz->ID);
- poz = poz->nextMsj;
- }
- }
- void afisare()
- {
- Categorie *poz = start;
- while(poz != NULL)
- {
- printf("Prioritate:%d\n", poz->prioritate);
- afisareMesaje(poz);
- poz = poz->next;
- }
- }
- int main()
- {
- int optiune;
- do{
- printf("1. Adaugare categorie de prioritati\n2. Adaugare mesaj\n3. Deservire mesaj\n4. Afisare mesaje existente\n5. Quit\n");
- scanf("%d", &optiune);
- switch(optiune)
- {
- case 1:
- adaugareCategorie();
- break;
- case 2:
- adaugareMesaj();
- break;
- case 3:
- printf("3 not yet\n");
- break;
- case 4:
- afisare();
- break;
- case 5:
- break;
- default:
- printf("Nu exista aceasta optiune\n");
- }
- }while(optiune!=5);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement