Din fisier se citesc,
caracter cu caracter, n caractere; să se creeze o listă dublu înlănţuită, care
să conţină în noduri caracterele distincte şi frecvenţa lor de apariţie. Lista va
fi ordonată alfabetic. Se vor afişa caracterele şi frecvenţa lor de apariţie a)
în ordine alfabetică crescătoare şi b) în ordine alfabetică descrescătoare.
#include <stdio.h>Fisier in.txt
#include <stdlib.h>
typedef struct nodtype
{
char s[20];
int a;
struct nodtype *urm;
struct nodtype *prec;
} nod;
void adaug(nod **prim,nod **ultim,char s[])
{
nod *p;
p=(nod *)malloc(sizeof(nod));
strcpy(p->s,s);
p->urm=NULL;
p->prec=NULL;
p->a=1;
if (!(*prim))
{
(*prim)=p;
(*ultim)=p;
return 0;
}
else
{
if (!(*prim)->urm)
{
if (strcmp(p->s,(*prim)->s)<0)
{
p->urm=(*prim);
(*ultim)=(*prim);
(*prim)=p;
(*ultim)->prec=p;
return 0;
}
else
{
if (strcmp(p->s,(*prim)->s)>0)
{
p->prec=(*prim);
(*prim)->urm=p;
(*ultim)=p;
return 0;
}
else
{
(*prim)->a=(*prim)->a+1;
return 0;
}
}
}
}
nod *q;
q=(nod *)malloc(sizeof(nod));
q=(*prim);
if (strcmp(p->s,q->s)<0)
{
p->urm=(*prim);
(*prim)->prec=p;
(*prim)=p;
return 0;
}
while (strcmp(p->s,(q->urm)->s)>0)
{
q=q->urm;
if (!q->urm)
break;
}
if (!q)
{
p->prec=(*ultim);
(*ultim)->urm=p;
(*ultim)=p;
return 0;
}
if (q->urm && strcmp(p->s,(q->urm)->s)==0)
{
(q->urm)->a=(q->urm)->a+1;
return 0;
}
if (strcmp(p->s,q->s)==0)
q->a=q->a+1;
else
{
if (q!=(*ultim))
{
p->urm=q->urm;
p->prec=q;
(q->urm)->prec=p;
q->urm=p;
}
else
{
p->prec=(*ultim);
(*ultim)->urm=p;
(*ultim)=p;
}
}
}
void afisare(nod *prim)
{
while (prim)
{
printf("%s - %d\n",prim->s,prim->a);
prim=prim->urm;
}
printf("\n");
}
int main()
{
char s[20];
FILE *f;
nod *prim,*ultim;
prim=(nod *)malloc(sizeof(nod));
ultim=(nod *)malloc(sizeof(nod));
prim=NULL;
ultim=NULL;
f=fopen("in.txt","r");
while (!feof(f))
{
fscanf(f,"%s",s);
adaug(&prim,&ultim,s);
}
afisare(prim);
printf("\nTastati o tasta pentru terminare");
getch();
return 0;
}
sepcile
rosii
u
u
haide
haide
u
u
sepcile
u
u
u
rosii
stadion
noi
universitatea