zxg623zxg623.blog.chinaunix.net
zxg623
全部博文(213)
软件(4)
面试题目(9)
应用(10)
bootloader(1)
ARM(3)
音频(0)
vivi(2)
blob(0)
u-boot(12)
硬件(0)
usb(1)
uboot(0)
网络(1)
信号(1)
gcc(1)
程序开发(6)
进程与线程(10)
shell(1)
驱动(16)
使用技巧(13)
脚本(2)
内核(16)
2014年(1)
2013年(5)
2012年(11)
2011年(2)
2010年(8)
2009年(26)
2008年(160)
程睿
huhuwang
pzm0729
gongping
gududesi
小雅贝贝
wbshwxn
52dreame
Alex_Liu
lja19951
jiajia
_nosay
longchao
格伯纳
浪花小雨
cynthia
LLQ2018
分类: C/C++
2008-04-11 00:34:43
由字母a~z所组成的字符串的一个集合中,各个字符的长度之和为n。设计一个O(n)时间的算法,将这个集合中所有字符串依字典进行排序。注意,这里可能存在非常长的字符串。 #include <stdio.h>#include <malloc.h>typedef struct tire{ struct tire *next[26]; char date; int cnt;}*_tire;void init_tire(_tire root, char *string){ _tire s; s=root; while(*string!='\0') { if(s->next[*string - 'a']==NULL) { s->next[*string - 'a'] = (_tire)malloc(sizeof(struct tire)); (s->next[*string - 'a'])->date = *string; s = s->next[*string - 'a']; for(int i=0;i<26;i++) { s->next[i] = NULL; } } else { s = s->next[*string - 'a']; } string++; } s->cnt=1;}void print(_tire root, char *s, int i){ int j; 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); } }}int main(){ _tire root; int m,i; char s[265]; root = (_tire)malloc(sizeof(struct tire)); 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); } } return 0;}
上一篇:四则运算
下一篇:利用高斯消去法计算行列式的值
登录 注册