手机号码查找算法(基数树)

转载 2012年03月28日 13:45:59

 

typedef struct mctree_node      mctree_node;
struct mctree_node{
        mctree_node     *child[10];     //节点内包含10个子节点
        mctree_node     *parent;        //当前节点的父节点
        dpl_uint8_t     level;          //当前节点深度
        dpl_uint8_t     valid[10];      //每个子节点是否存在
        //int           count[10];      //每个子节点计数器
};

typedef struct mctree_table      mctree_table;
struct mctree_table{
        mctree_node     *root;
        dpl_blkp_t      *blkp;
        dpl_lock_t      lock;
};

 

dpl_status_t mcnode_find(mctree_node *root, char *id, mctree_node **valid, mctree_node **last)
{
        mctree_node     *pt = NULL;
        int             find = 0, i=0, j=0;

        if(root == NULL || id == NULL || valid == NULL || last == NULL)
                return EINVAL;
        pt = *last =  root;

        while(id[i] != '\0'){
                j = id[i]-'0';
                //若有效,则记录
                if(pt->valid[j] == 1){
                        find  = 1;
                        *valid = pt;
                }
                //查找子节点
                if(pt->child[j] != NULL){
                        pt = pt->child[j];
                        *last = pt;
                }else{
                        break;
                }
                i++;
        }

        if(find == 1){
                if((*valid)->level == strlen(id)-1)
                        return DPL_SUCCESS;
                else
                        return DPL_ISCHILD;
        }
        return DPL_NOTFOUND;
}

 

dpl_status_t mcnode_add(mctree_table *mctree,char *id, mctree_node *last)
{
        dpl_status_t    stat = DPL_SUCCESS;
        mctree_node     *pt = NULL;
        mctree_node     *pn = NULL;
        int             i=0,j=0;
       
        if(mctree == NULL || id == NULL)
                return EINVAL;
               
        if(last == NULL)
                pt = mctree->root;
        else   
                pt = last;
               

        //查找待插入的子节点
        while((id[i] != '\0') && (id[i+1] != '\0')){
                j = id[i] - '0';
                if(pt->child[j] == NULL){
                        stat = dpl_blkp_malloc(mctree->blkp, (void**)&pn);
                        if(DPL_SUCCESS != stat){
                                TRACE(dpl_blkp_malloc, stat);
                                return stat;
                        }      
                        memset(pn, 0, sizeof(mctree_node));
                        pn->parent = pt; //新节点的父节点,此处用下标0
                        pn->level = pt->level + 1;
                        pt->child[j] = pn; //父节点子指向子节点
                        pt = pn;
                }else{ 
                        pt = pt->child[j];
                }      
                i++;
        }
        //插入
        j = id[i] - '0';
        if(pt->valid[j] == 1)
                return DPL_EXIST;
        pt->valid[j] = 1;
        return DPL_SUCCESS;
}

 

相关文章推荐

OC算法 输出手机号码归属地

输出手机号码归属地  *1.读取文件中的数据 文件如下: 5582|1860101|010|北京市|北京联通GSM卡 5583|1860100|010|北京市|北京联通GSM卡 5584|13681...

悠树手机号码搜索软件

  • 2010年09月07日 10:39
  • 2.45MB
  • 下载

WebService(手机号码归属地查询和天气查询)

简介 Web Service Web service是一个平台独立的,松耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发...

校验出生日期,校验身份证格式,校验会员账户:9开头数字,校验手机号码是否合法,判断字符串中的url是否都是图片格式字符串,通过图片url读取图片并将图片转换成base64编码

校验出生日期,校验身份证格式,校验会员账户:9开头数字,校验手机号码是否合法,判断字符串中的url是否都是图片格式字符串,通过图片url读取图片并将图片转换成base64编码...

获取联系人手机号码、姓名、地址、公司、邮箱、生日

public void testGetAllContact() throws Throwable { //获取联系人信息的Uri Uri uri = ContactsContract.Con...
  • aicpzl
  • aicpzl
  • 2016年05月19日 09:52
  • 6932

我的Android进阶之旅------>Android通过调用Webservice实现手机号码归属地查询

此app的实现功能如图所示:   注:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx是本文webservice的提供商 具...

【go语言爬虫】go语言高性能抓取手机号码归属地、所属运营商

一、需求分析 根据手机号码获取手机号码的归属地和所属运营商类型 类似:四川 18683339513 乐山 614000 0833 中国联通二、运行效果 三、实现源代码package main//...

利用PHP实现手机号码归属地查询程序

最近公司要求在进行注册时能够对输入手机号码归属地进行自动判断,经过在网上的查找,发现提供手机号码归属地查询类似的接口不少,最后找到一个比较简单实用的接口,是由手机在线提供的。 该网站提供的接口包括如...

Android 使用ContentObserver监听短信的变化,并发送信息给特定的手机号码

public class ObserverActivity extends Activity implements OnClickListener { protected static fina...
  • lovoo
  • lovoo
  • 2016年04月17日 07:53
  • 681
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手机号码查找算法(基数树)
举报原因:
原因补充:

(最多只允许输入30个字)