() void CreatOut( )∥建立有n个单词的单向链表重复单词只在链表中保留一个最后输出频度最高的k个单词
{LinkedList la;
la=(LinkedList)malloc(sizeof(node));∥申请头结点
la>next=null;∥链表初始化
for(i=;i<=n;i++)∥建立n个结点的链表
{scanf(%sa);∥a是与链表中结点数据域同等长度的字符数组
p=la>next;pre=p;∥p是工作指针pre是前驱指针
while(p!=null)
if(strcmp(p>dataa)==)
{p>freg++;∥单词重复出现频度增
pre>next=p>next;∥先将p结点从链表上摘下再按频度域值插入到合适位置
pre=la; q=la>next;
while(q>freg>p>freg) (pre=q; q=q>next; )
pre>next=p; p>next=q;∥将p结点插入到合适位置
}
else {pre=p;p=p>next;}∥指针后移
if(p==null)∥该单词没出现过应插入到链表最后
{p=(LinkedList)malloc(sizeof(node));
strcopy(p>dataa);p>freg=;p>next=null;pre>next=p;
}∥if 新结点插入
}∥结束for循环建表
int ki=;
scanf(输入要输出单词的个数%d&k);
p=la>next;
while (p && i<k)∥输出频度最高的k个单词
{printf(第%d个单词%s出现%d次\n++ip>datap>freg);
p=p>next;
}
if (!p)
printf(给出的%d值太大\nk);
}∥结束算法
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []