#include #define num_of_lists 2048 typedef struct node { char* data; node* next; } unsigned int hasher(char* word) { unsigned int l = strlen(word), n; while(l--) n += word[l]; return n%num_of_lists; } void check_hash_table(char* word, node** table) { node* list_node; unsigned int hash; hash = hasher(word); list_node = table[hash]; while(list_node->next != 0){ list_node = list_node->next; if(strcmp(list_node->data,word)) continue; return 0; } list_node->next = malloc(sizeof(struct node)); list_node = list_node->next; list_node->next = 0; list_node->data = malloc(strlen(word)+1); strcpy(list_node->data, word); return 1; } void main(void) { unsigned int i; node hash_table[num_of_lists+1]; for(i=0;idata = 0; hash_table[i]->next = 0; } for(i=1;i<=argc;i++){ if(check_hash_table(argv[i],hash_table)) printf("%s",argv[i]); } }