推薦字典樹的更好方法。
#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
#包含?& ltstring.h & gt
結構?節點;
typedef?結構?節點?節點,?* pNode
結構?節點{
夏爾。* str
int?時代;
pNode?接下來;
};
pNode?新節點(char?*str)
{
pNode?p;
p?=?malloc(sizeof(節點));
p-》;str?=?malloc(strlen(str)?+?1);
strcpy(p-& gt;str,?str);
p-》;時代?=?1;
p-》;下壹個?=?NULL
回歸?p;
}
pNode?find _ str(pNode?頭?夏爾。*str)
{
pNode?p;
p?=?頭;
當(p)
{
if(strcmp(p-& gt;str,?str)?==?0)
打破;
p?=?p-》;接下來;
}
回歸?p;
}
虛空?insert _ node(pNode *?頭?pNode?n)
{
pNode?最後?=?NULL,?cur
cur?=?*頭像;
while(曲線)
{
if(strcmp(cur-& gt;str,?n-& gt;str)?& gt?0)中斷;
最後?=?cur
cur?=?cur-》;接下來;
}
如果(最後?==?NULL)?
{
n-& gt;下壹個?=?cur
*頭像?=?n;
}
其他
{
n-& gt;next = last-& gt;接下來;
最後-& gt;下壹個?=?n;
}
}
虛空?print _ list(pNode?頭部)
{
pNode?p?=?頭;
當(p)
{
printf(“% s?%d\n“,?p-》;str,?p-》;times);
p?=?p-》;接下來;
}
}
虛空?delete _ list(pNode?頭部)
{
pNode?p?=?頭;
if(p-》;下壹個)?delete _ list(p-& gt;下壹個);
免費(p-》;str);
免費(p);
}
int?主()
{
int?c;
夏爾。word【1024】;
pNode?頭?=?NULL
int?j?=?0;
int?單詞=?0,?CNT = 0;
while(1)
{
c?=?getchar();
if(c?!=?'?'?& amp& amp?c?!=?\ n’)
word【j++】?=?c;
其他
{
如果(j)
{
pNode?t;
word【j】?=?0;
t?=?find _ str(head,?word);
if(t)?t-》;時代?++;
其他
{
t?=?new _ node(word);
如果(頭)
insert_node頭?t);
不然呢?頭?=?t;
文字?++;
}
cnt?++;
j?=?0;
}
}
if(c?==?EOF)?打破;
}
printf(“字數:%d?計數:%d\n“,?話說,?CNT);
print _ list(head);
delete _ list(head);
回歸?0;
}