c - programul construieste o lista circulara de caractere,
pe care apoi o tipareste, si in care se cauta un anumit caracter */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct st_litera { char car; struct st_litera * pred, *urm; }; int ncl=0; /* numar de caractere afisate pe linie */ void atasare(struct st_litera *pl){ char c; struct st_litera *vr; while ((c=getchar()) != EOF) if (c!='\n') {vr=(struct st_litera *) malloc(sizeof(struct st_litera)); if (vr == NULL) { /* daca pointerul returnat de functia malloc() este NULL */ printf("Memorie plina !!!!!!\n"); /* se tipareste un mesaj de eroare */ break; /* si se termina executia ciclului de citire caractere */ } vr->car=c; if(pl->pred==pl) /* lista vida? */ {vr->pred=vr->urm=pl; pl->urm=pl->pred=vr; } else {vr->urm=pl; vr->pred=pl->pred; pl->pred->urm=vr; pl->pred=vr; } } } void afis_list_circ (struct st_litera *plc){ struct st_litera *p; p=plc->urm; while (p != plc) {printf("%c -> ", p->car); p=p->urm; ncl++; if (ncl%10==0) /* s-au afisat 10 caractere pe linie ? */ printf("\n"); } if (plc->urm!=plc) printf("%c (primul).\n", plc->urm->car);/* tiparire primul caracter sau NULL daca lista este vida */ else printf("NULL"); } int numar_aparitii_car (struct st_litera *start, char *pcar) { int numar = 0;
struct st_litera *curent;
/* pointerul cu care se parcurge lista */ *pcar=start->car; /* se transmite prin adresa primita, caracterul cautat */ curent=start->urm; while (curent != start) /* cat timp referinta la urmatorul din lista */ { /* nu a ajuns la santinela/ start */ if (start->car == curent->car) /* se numara daca este caracterul */ numar++; curent=curent->urm; } return (numar); } int main() { struct st_litera *primul; char ch; primul->urm=primul->pred=primul; /* lista vida */ printf("\nProgramul construieste si afiseaza o lista circulara de char.\n"); printf("Introduceti caractere (CTRL-Z, Enter-pentru sfarsit):\n"); atasare(primul); printf("\nLista circulara construita este:\n"); afis_list_circ(primul); printf("Caracterul de cautat in lista: "); ch=getch(); primul->car=ch; /* se pune caracterul de cautat in santinela/ start */ printf("\nCaracterul \'%c\' este in lista de %d ori\n",ch, numar_aparitii_car(pr imul, &ch)); }