专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »算法 » 加密算法源代码:字典树算法源代码 »正文

加密算法源代码:字典树算法源代码

来源: 发布时间:星期三, 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

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: