字典树的建立,插入,查找
来源:互联网 发布:图标制作软件手机版 编辑:程序博客网 时间:2024/06/05 17:27
#include <iostream>
#include<string.h>
#define N 100000
#define MAX 26
using namespace std;
#include<string.h>
#define N 100000
#define MAX 26
using namespace std;
typedef struct node //自定义一个结构体字典树
{
struct node *next[MAX];//对每个节点最多26个孩子节点
int num; //表示存储的孩子节点的个数
}Node;
{
struct node *next[MAX];//对每个节点最多26个孩子节点
int num; //表示存储的孩子节点的个数
}Node;
Node *createNew() //创建字典树
{
Node *p=new Node; //创建一个结构体,p指向头
for(int i=0;i<MAX;i++)
{
p->next[i]=NULL; //每个节点最多26个孩子节点,对其初始化为0
}
p->num=0; //叶子节点以下无孩子节点,将num设置为0,表示其无子节点了
return p; //对一个字典树,相当于递归,只存在一个根节点和26个子节点,
//子节点num均设置为0,对子节点,如何想继续存在孩子节点,则
//以此子节点为根,再创建一个字典树
}
{
Node *p=new Node; //创建一个结构体,p指向头
for(int i=0;i<MAX;i++)
{
p->next[i]=NULL; //每个节点最多26个孩子节点,对其初始化为0
}
p->num=0; //叶子节点以下无孩子节点,将num设置为0,表示其无子节点了
return p; //对一个字典树,相当于递归,只存在一个根节点和26个子节点,
//子节点num均设置为0,对子节点,如何想继续存在孩子节点,则
//以此子节点为根,再创建一个字典树
}
//插入一个字符
void Insert(char str[],Node *head)
{
int len=strlen(str);
Node *t,*p=head;
for(int i=0;i<len;i++)
{
int c=str[i]-'a'; //对于一个字符串,每个节点保存的不是单个字符,而是0-25的数
if(p->next[c]==NULL) //对于一个字符串,他的长度为len则他的深度也为len,
{ //插入第i个字符,如果还没达到字符串长度,则需要在这个节点下再建立
t=createNew(); //一个字典树,用以插入下一个字符。
p->next[c]=t; //我们这里将其理解为每个字典树只有一层,深度为1,共26个节点,如果
p->num++; //字符串长度有s则我们需要建立s层字典树。
}
else
{
p=p->next[c];
}
}
}
void Insert(char str[],Node *head)
{
int len=strlen(str);
Node *t,*p=head;
for(int i=0;i<len;i++)
{
int c=str[i]-'a'; //对于一个字符串,每个节点保存的不是单个字符,而是0-25的数
if(p->next[c]==NULL) //对于一个字符串,他的长度为len则他的深度也为len,
{ //插入第i个字符,如果还没达到字符串长度,则需要在这个节点下再建立
t=createNew(); //一个字典树,用以插入下一个字符。
p->next[c]=t; //我们这里将其理解为每个字典树只有一层,深度为1,共26个节点,如果
p->num++; //字符串长度有s则我们需要建立s层字典树。
}
else
{
p=p->next[c];
}
}
}
//字典树的查找
int search(char str[],Node *head)
{
Node *p=head;
int len=strlen(str);
int count = 0; //count是用来计数节点下层有几个孩子节点的
for(int i=0;i<len;i++)
{
int c=str[i]-'a';
if(p->next[c]==NULL)//对于字符串中的某一个字符,如果字典树中,
{ //这个节点下面已经没有孩子节点,
cout<<"不存在字符串"<<endl;//则字符串这个位置后的字符在字典树中是不可能继续找到的,
count=0; //所以可以返回“不存在该字符串”
return 0;
}
else
{
p=p->next[c];//否则就是这个节点下面有子节点,则指针下移以为,继续找
count=p->num;
}
}
return count;
}
int search(char str[],Node *head)
{
Node *p=head;
int len=strlen(str);
int count = 0; //count是用来计数节点下层有几个孩子节点的
for(int i=0;i<len;i++)
{
int c=str[i]-'a';
if(p->next[c]==NULL)//对于字符串中的某一个字符,如果字典树中,
{ //这个节点下面已经没有孩子节点,
cout<<"不存在字符串"<<endl;//则字符串这个位置后的字符在字典树中是不可能继续找到的,
count=0; //所以可以返回“不存在该字符串”
return 0;
}
else
{
p=p->next[c];//否则就是这个节点下面有子节点,则指针下移以为,继续找
count=p->num;
}
}
return count;
}
0 0
- 字典树的建立,插入,查找
- 字典树的建立、删除、查找
- 字典树的插入 删除 查找
- 顺序二叉树的建立、查找、删除、插入、替换、遍历
- 二叉树的建立,删除,查找,插入,输出(数据结构)
- 排序二叉树的建立、插入、删除、查找
- 单链表的初始化,建立,插入,查找,删除。
- 双链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除
- 双链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除。
- 双链表的初始化,建立,插入,查找,删除
- 双链表的初始化,建立,插入,查找,删除。
- 双链表的建立、查找、删除、插入
- 单链表的初始化,建立,插入,查找,删除
- 二叉排序树的查找、插入、删除、建立
- 单链表的初始化,建立,插入,查找,删除。
- 剑指offer-二叉树的下一个结点
- WdatePicker日历控件动态设置属性参数值
- Zurmo(十六)之自定义LoginPageView
- 层次遍历二叉树
- C++ 重载
- 字典树的建立,插入,查找
- (转)Windows下Nginx的启动、停止等命令
- OS进程调度实验
- 分治法
- WPF应用
- ARM的体系结构
- ajax配合spring实现文件上传
- ubuntu16.04+cuda8.0+cudnn5.1 安装
- 【机器学习】【数据预处理】数据的规范化,归一化,标准化,正则化