结构:
struct node
{
int flag;
node *next[27];
}*head;
生成节点:
/*动态分配内存*/
node * newnode()
{
int i;
node * p = new node; // c语言用(node * )malloc(sizeof(node), 这里是动态分配内存,时间上可能消耗的多一些
p->flag = 0;
for(i = 0; i < 26; i++)
p->next[i] = NULL;
return p;
}
/*静态分配内存*/
node T[1000000];
int t = 0;
node * newnode()
{
int i;
node * p = &T[t++];
p->flag = 0;
for(i = 0; i < 26; i++)
p->next[i] = NULL;
return p;
}
注意:
1:在此之前head一定要先分配,否则无法执行,这里自己老是出错。
2:还有如果处理多组数据的话一定要注意清空T[]数组,否则影响后边的处理。
插入操作:
void insert(char *s)
{
int i,k;
int len = strlen(s);
node *p = head;
for (i = 0; i < len; ++i)
{
k = s[i] - 'a';
if (p->next[k] == NULL)
p->next[k] = newnode();
p = p->next[k];
}
p->flag = 1;
}
查找操作:
bool search(char *s)
{
int i,k;
int len = strlen(s);
node *p = head;
for (i = 0; i < len; ++i)
{
k = s[i] - 'a';
if (p->next[k]) p = p->next[k];
else
return false;
}
if (p->flag) return true;
else return false;
}
程序完毕后释放内存函数:
void del(node * p)
{
int i;
if(p) //p不为空
{
for(i =0; i <26; i++)
if(p->next[i])
del(p->next[i]); //递归删除每一个p->next[]
}
free(p);
p = NULL;
}