- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 - 58
 - 59
 - 60
 - 61
 - 62
 - 63
 - 64
 - 65
 - 66
 - 67
 - 68
 - 69
 - 70
 - 71
 - 72
 - 73
 - 74
 - 75
 - 76
 - 77
 - 78
 - 79
 - 80
 - 81
 - 82
 - 83
 
                        #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 512
typedef struct word
{
	char wordBody[MAXSIZE];
	int count;
	struct word* next;
} Word;
Word* alloc(char* incomeWord)
{
	Word* ret;
	ret = (Word*)malloc(sizeof(Word));
	ret->count=1;
	ret->next=NULL;
	strcpy(ret->wordBody, incomeWord);
}
void insert(Word **n, char* incomeWord)
{
	Word** p_p_n;
	int h=0;
	if(*n==NULL)
	{
		*n = alloc(incomeWord);
		return;
	}
	for(p_p_n = n; *p_p_n!=NULL; p_p_n = &(*p_p_n)->next)
	{
		if((strcmp(incomeWord,&(*p_p_n)->wordBody))==0)
		{
			(*p_p_n)->count++;
			return;
		}
	}
	for(p_p_n = n; *p_p_n!=NULL; p_p_n = &(*p_p_n)->next)
	{
		Word* ins = alloc(incomeWord);
		Word* temp = *p_p_n;
		Word** tt;
		int is=0;
		tt=p_p_n;
		ins->next=temp;
		*p_p_n = ins;
		break;
	}
}
void print(Word* n)
{
	while(n!=NULL) {
		if(n->count > 1)
		{
			printf("%s %d\n", n->wordBody, n->count);
		}
		n=n->next;
	}
}
int main(void)
{
	char buf[MAXSIZE]={'\0'};
	FILE *fr;
	Word* sez=NULL;
	fr=fopen("Text1.txt", "r");
	while(!feof(fr))
	{
		fscanf(fr,"%s",buf);
		insert(&sez,buf);
	}
	print(sez);
	printf("\n%d\n", sizeof(sez));
	fclose(fr);
	return 0;
}
                                 
        
            Считаем сколЬко раз каждое слово встречается в текстовом файле. Программа выполняется 6.5 минут с файлом размером 850 килобайт.
        
        
Хэшмап бы тут.
Нет, это матрица из массивов указателей.
А теперь без шуток - есть же typedef, с помощью которого можно превратить эти созвездия в нечто более-менее понятное (или, при должной сноровке, в нечто совершенно непонятное).
Так?
ps http://www.youtube.com/watch?v=uqMo-B5LhcA
ошибится легко, нереально просадив производительность
Ну а что вы хотели от неупорядоченного односвязного списка...
P.S. Цикл в строках 42-52 доставляет, это просто гениальная замена if (!*n), которое, впрочем, тут и не нужно, т.к. проверено в строке 27.
с другой стороны, я и в продакшн коде кучи std::list (и давеча еще и java.util.LinkedList) c аналогичными юз-кейсами видел.
говно говнистое, но уж больно обыденое.
http://zvon.org/other/haskell/Outputprelude/lookup_f.html
В стандартную библиотеку хаскеля входит функции для поиска по ключу в односвязанном списке за O(n). То есть хаскелисты это даже поощряют.