6-1 关键字索引表 (100 分)
为某本书建立一个关键字索引表。首先建立一个单链表,有26个结点,每个结点分别代表字母a,b,c,…,x,y,z。每个字母结点又指向以该字母开头的关键字的链表,该链表以字母顺序为序。如图所示:(字母链表,即蓝色垂直方向链表可以用结构体数组代替;每个字母结点所带的链表,即水平方向红色链接的表,可以根据需要增加一个头结点)
输入一个单词,比如“cat”,程序从head所指向的结点‘a’开始,根据链接(蓝色箭头)依序找到‘c’,再从‘c’结点根据链接(红色箭头)依序查找“cat”。如果找到与之一致的单词,则输出该单词及所在的页码,否则输出“Not found such a word.”,然后输入页码值,将cat这个单词插入到红色链表的适当位置。如果输入@a,则输出全部以a为首的关键字及对应页码,如果没有以该字母为首的关键字,则输出“Not found any vocabularies.”,其他字母以此类推。输入@@,则程序结束。 第一个输入输出样例,在运行时的实际界面如下图:
即:
四个函数来实现索引表
初始化
建立一个LETTER型的链表,每个节点中letter存a到z二十六个字母,kwp指向一个KW型的节点,这个节点下一项指向空。建立这个节点可以方便后面进行后面的操作。
void imit(){
char a = 'a';
LETTER *p;
head = p = (LETTER *)malloc(sizeof(LETTER));
for(int i = 0; i < 26; i++){
p->letter = a + i;
p->kwp = (KW *)malloc(sizeof(KW