思路是把一个大的链表按照字母分为26个小表,每个小链表中的单词都以同一个字母开头。
下面是实现的程序,核心步骤都有注释。
转载请注明出处:http://www.cnblogs.com/zydark/p/8891386.html
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <ctype.h> 5 #include <assert.h> 6 #define N 30 7 typedef struct WORD{//保存由value开头的所有单词,由不同字母开头的单词 8 struct WORD *next; 9 char *word; 10 } Word; 11 12 13 typedef struct NODE{//保存所有的单词 14 struct NODE *next; 15 char letter; 16 Word* data; 17 } Node; 18 int insert(Node **rootp,char *str); 19 void print(Node* rootp); 20 int main (void) 21 { 22 Node* p1=(Node*)malloc(sizeof(Node)); 23 if(p1==NULL) 24 perror("malloc error"); 25 26 p1->next=NULL; 27 p1->letter='a'; 28 Word* the_word; 29 the_word=(Word*)malloc(sizeof(Word)); 30 if(the_word==NULL) 31 perror("malloc error"); 32 33 the_word->next=NULL; 34 35 the_word->word=(char*)malloc(N); 36 if(the_word->word=NULL) 37 perror("malloc error"); 38 39 the_word->word="ahello"; 40 41 p1->data=the_word; 42 43 char value[N]; 44 printf("输入插入的字符串: "); 45 while(fgets(value,N,stdin)!=NULL) 46 { 47 value[strlen(value)-1]='