#include #include #define FREQ struct freq * struct freq {int ch;int count;FREQ left;FREQ right;}; FREQ fp; FREQ newFreq(char ch) { FREQ f; f = (struct freq *)malloc(sizeof(struct freq)); f->ch = ch; f->count = 1; f->left = NULL; f->right = NULL; return f; } incFreq(int ch) { FREQ f; if(fp==NULL) { fp = newFreq(ch); return; } f = fp; while(1) if(f->ch==ch) { f->count = f->count+1; return; } else if(f->ch>ch) if(f->left==NULL) { f->left = newFreq(ch); return; } else f = f->left; else if(f->right==NULL) { f->right = newFreq(ch); return; } else f = f->right; } showFreq(FREQ f) { if(f==NULL) return; showFreq(f->left); printf("%c:%d\n",f->ch,f->count); showFreq(f->right); } main(int argc,char ** argv) { int ch; FILE * fin; if((fin=fopen(argv[1],"r"))==NULL) { printf("can't open %s\n",argv[1]); exit(0); } fp = NULL; ch = getc(fin); while(ch!=EOF) { incFreq(ch); ch = getc(fin); } fclose(fin); showFreq(fp); }