分析一点最近学习的东西,链表和Trie算法

package com;










public class A {
public B root;
public final class B{
public B  b1;
public B  b2;
public B b3;
public char next;
public B (char next){
this.next=next;
}
 
}
public B search(String key){
if(root==null){
root= new B(key.charAt(0));
}
B cuur=null;
cuur=root;
int index=0;
B node=null;
while(true){
if (cuur == null)
break;
int c=key.charAt(index)-cuur.next;
if(c==0){
index++;
if(index==key.length()){
node=cuur;
break;
}
  cuur=cuur.b1;
}else if(c<0){
cuur=cuur.b3;
}
else if(c>0){
cuur=cuur.b2;
}
}

return node;
}
/**
* tire 算法
* 数据结构链表
* @param cont
* @return
*/
public B create(String cont){
int index=0;
if (root == null) {
root = new B(cont.charAt(0));
}
B cuur=null;
cuur=root;
while(true){
int c=cont.charAt(index)-cuur.next;//两个char 相减,得到ascii码,
if(c==0){//ascii码相同
index++;
if(index==cont.length()){//如果当前位置和输入字符串相等 返回这个节点介绍循环
return cuur;
}
if(cuur.b1==null){//如果当前不存在这个节点,每次循环创建下一个节点用来比较
cuur.b1=new B(cont.charAt(index));
}
cuur=cuur.b1;
}else if(c<0){//如果ASCII码小于0 我的理解是,这个字符排列在当前字符前面,这样就会有顺序
if(cuur.b2==null){
cuur.b2=new B(cont.charAt(index));
}
cuur=cuur.b2;
}else {
if(cuur.b3==null){
cuur.b3=new B(cont.charAt(index));
}
cuur=cuur.b3;


}

}


}
public static void main(String[] args) {/*
String ss="saasaas";
Class<A> aa=A.class;
 
try {
Object obj=aa.newInstance();
Method  m=aa.getMethod("insert", String.class);
m.invoke(obj, ss);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

*/
A a=new A();
// /a.insert("saa");
a.create("sa");
a.create("sss");

/* try {
String ss="sssss";
A te=aa.getConstructor(ss.getClass()).newInstance(ss.getClass());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
 
}

}
 

猜你喜欢

转载自blog.csdn.net/l_mr_l/article/details/78416775