int main() { struct avltree *tree; struct kvnode head; struct kvnode *tail; struct kvnode *p; char buf[200]; int retval; char *str; struct node **ins; FILE *f = fopen("bible.txt","r"); int start,end; tail = &head; tree = avltree_create(cmpf, setf); start = clock(); while((retval = fscanf(f,"%s",buf)) != EOF) { str = malloc(strlen(buf)+1); strcpy(str,buf); p = node_create(str,1); ins = avltree_find(tree,p); if(*ins == NULL) { //第一次 *ins = p; avltree_adjust(tree); tail->next = p; tail = p; } else { //直接插,不用平衡调整了 ((struct kvnode*)(*ins))->val ++; } } end = clock(); printf("%d\n",end-start); /* for(p=head.next; p!=tail; p=p->next) { printf("%s,%d\n",p->key,p->val); }*/ return 0; }
struct avltree * stravltree_create() { return avltree_create(cmp,del); }