单词查询问题

RiweiChen 2011-06-20 11:57:17
具体的题目:http://acm.fzu.edu.cn/problem.php?pid=1961
我的代码:
//单词映射,要能够快速找到一个单词。
#include<iostream>
#include<cstring>
using namespace std;
struct date
{
int valu;//valu的值表示从头节点到该点的路径的单词是否出现或表示它的值。-1表示没有出现。
date *next[26];//类似于26叉树。每一个分叉就代表着一个字母。
};

int main()
{
int m;
cin>>m;
getchar();
int i,j,k;
char ch;
char word[10];
int valu;

date begin;//先定义个头节点。
begin.valu=0;
for (i=0;i<26;i++)
{
begin.next[i]=NULL;//初值都为空指针,即为空的单词库。
}

for (k=0;k<m;k++)
{
cin>>ch;
getchar();
if (ch=='A')
{
cin>>word;
cin>>valu;
date temp=begin;//开始定位在树头,开始查找。
for (j=0;j<26;j++)
{
temp.next[j]=begin.next[j];
}
i=0;
while (word[i]!='\0')
{
if (temp.next[word[i]-'a']!=NULL)
{
temp=*temp.next[word[i]-'a'];
}
else
{
temp.next[word[i]-'a']=new date;
temp=*temp.next[word[i]-'a'];
for (j=0;j<26;j++)
{
temp.next[j]=NULL;
}
temp.valu=-1;
}
i++;
}
temp.valu=valu;
}
if (ch=='Q')
{
cin>>word;
date temp=begin;
for (j=0;j<26;j++)
{
temp.next[j]=begin.next[j];
}
i=0;
while (word[i]!='\0')
{
if (temp.next[word[i]-'a']!=NULL)
{
temp=*temp.next[word[i]-'a'];
}
else
{
cout<<-1<<endl;
break;
}
if (word[i+1]=='\0')
{
cout<<temp.valu<<endl;
}

i++;
}

}



}
//释放空间。

return 0;
}

我还没有进行空间释放处理。
问题出现是:
第一。构建的树结构是否可行?结果为什么跟理想中的不一样。
第二。删除数时,用什么方式最省时。
第三。有没有什么更好的方法?
欢迎大家跟我点意见。谢谢啦。。
...全文
114 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
RiweiChen 2011-06-26
  • 打赏
  • 举报
回复
没人鸟?

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧