链表和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();
}*/
 
}

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值