加密算法源代码:字典树算法源代码来源: 发布时间:星期三, 2008年12月10日 浏览:30次 评论:0
算法描述为:由字母a~z所组成的字符串的一个集合中,各个字符的长度之和为n。设计一个O(n)时间的算法,将这个集合中所有字符串依字典进行排序。注意,这里可能存在非常长的字符串。
#include<stdio.h> #include<malloc.h> typedefstructtire { structtire*next[26]; chardate; intcnt; }*_tire; voidinit_tire(_tireroot,char*string) { _tires; s=root; while(*string!=’\\0’) { if(s->next[*string-’a’]==NULL) { s->next[*string-’a’]=(_tire)malloc(sizeof(structtire)); (s->next[*string-’a’])->date=*string; s=s->next[*string-’a’]; for(inti=0;i<26;i++) { s->next[i]=NULL; } } else { s=s->next[*string-’a’]; } string++; } s->cnt=1; } voidprint(_tireroot,char*s,inti) { intj; s[i]=root->date; if(root->cnt==1) { s[i+1]=0; puts(s); } for(j=0;j<26;j++) { if(root->next[j]!=NULL) { print(root->next[j],s,i+1); } } [Page] } intmain() { _tireroot; intm,i; chars[265]; root=(_tire)malloc(sizeof(structtire)); puts(\"输入字符串个数:\"); for(i=0;i<26;i++) { root->next[i]=NULL; } scanf(\"%d\",&m); getchar(); while(m--) { gets(s); init_tire(root,s); } puts(\"\\n依字典排序后:\"); for(i=0;i<26;i++) { if(root->next[i]!=NULL) { print(root->next[i],s,0); } } return0; } 0
相关文章读者评论发表评论 |