資料結構 演算法4 9 4 14 建立詞索引表

2021-07-23 14:24:22 字數 4668 閱讀 4629

#include

#include

#include

#include

#include

#define ok 1

#define error 0

#define true 1

#define false 0

#define overflow -2

#define maxbooknum 1000 //假設只對1000本書建立索引表(1000)

#define maxkeynum 2500 //索引表的最大容量(2500)

#define maxlinelen 500 //書目串的最大長度(500)

#define maxwordnum 10 //詞表的最大容量

#define maxwordlength 30 //單詞的最大長度

typedef

int status;

typedef

int elemtype; //定義鍊錶的資料元素型別為整型

typedef

int boolean;

typedef

struct

wordlisttype; //詞表的型別(順序表)

typedef

struct

hstring;

typedef

struct lnode

lnode,*link,*position;

typedef

struct

linklist;

typedef

struct

idxtermtype; //索引項型別

typedef

struct

idxlisttype; //索引表型別

//----------------主要變數--------------

char buf[maxlinelen]; //書目串緩衝區

wordlisttype wdlist; //關鍵字詞表

idxlisttype idxlist; //索引表

char oftenwords[6][10] = ;

/*******************************宣告部分****************************************/

//--------------基本操作---------

void initidxlist (idxlisttype *idxlist);

//初始化操作,置索引表idxlist為空表,且在idxlist.item[0]設一空串

void getline (file *f);

//從檔案f讀入乙個書目資訊到書目串緩衝區buf

void extractkeyword (int *num);

//status extractkeyword(char* buffer,wordlisttype *w,int *num);

status insidxlist (idxlisttype *idxlist,elemtype bno);

void puttext (file *g,idxlisttype idxlist);

//將生成的索引表idxlist輸出到檔案g

//--------------為實現在索引表上進行插入,要先實現下列操作-----------

void getword (int i,hstring *wd);

int locate (idxlisttype *idxlist,hstring wd,boolean *b);

//中的位置,且b取值true;否則返回插入位置,且b取值false

void insertnewkey(int j,hstring wd);

status insertbook (int i,int bno);

//在索引表idxlist的第i項中插入書號為bno的索引

//------------串的堆分配儲存表示-----------

status strassign(hstring *t,char *chars);

//生成乙個其值等於串常量chars的串t

int strcompare(hstring s,hstring t);

//若s>t,則返回值》0,若s=t,則返回值 = 0,若sstatus strcopy(hstring *t, hstring s);

//由串s複製得串t

//----------------帶頭結點的線性鍊錶-------------

status initlist(linklist *l);

//構造乙個空的線性鍊錶l

status makenode(link *p,elemtype e);

//分配由p指向值e的結點,並返回ok;若分配失敗,則返回error

//之後,改變鍊錶l的尾指標指向新的尾結點

/*******************************函式部分****************************************/

status strassign(hstring *t,char *chars)

else //else

return ok;

}void initstring(hstring *t)

int strcompare(hstring s,hstring t)

return s.length-t.length;

}status strcopy(hstring *t, hstring s)

status initlist(linklist *l)

status makenode(link *p,elemtype e)

(*l).tail = s;

(*l).len += i;

return ok;

}void getword(int i,hstring *wd)

int locate(idxlisttype *idxlist,hstring wd,boolean *b)

else

}void insertnewkey(int j,hstring wd)

initstring(&idxlist.item[j].key);

strcopy(&idxlist.item[j].key,wd); //插入新的索引項 //串賦值

initlist(&idxlist.item[j].bnolist); //初始化書號索引表為空表

++idxlist.last;

}status insertbook (int i,int bookno)

status insertidxlist(idxlisttype *idxlist,int bno)

return ok;

}void initidxlist (idxlisttype *idxlist)

}void extractkeyword (int *booknum)

tempchar[i] = '\0';

*booknum = atoi(tempchar); //將書號轉為int

for(m = 0;m<=i;m++)

tempchar[m] = '\0'; //清空tempchat

i++; //推進一位,當前*(buf+i)開始為書名

while(*(buf+i) != '\n' && *(buf+i) != '\0')

tempchar[j] = *(buf+i); //把當前字元加入tempchar中//------------

j++;

i++;

} //if

else//if

}//for

if(ignore)//if

else//else

}//else

}//while

}void getline(file *f)

void puttext (file *g,idxlisttype idxlist)

//for

putc('\n',g);

}//for

}void printfile(file *filename)

printf("\n");

rewind(filename);

}/*******************************主函式部分**************************************/

int main()

if((g = fopen("keywordindex_self.txt","w"))==null)

printf("書單檔案:\n");

printfile(f);

initidxlist(&idxlist);

wordlisttype w;

while(!feof(f))

puttext(g,idxlist);

fclose(f);

fclose(g);

printf("\n結果如下:\n");

資料結構 資料結構演算法

分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...

資料結構與演算法(三) 變位詞判斷問題

解法2 排序比較 解法3 暴力法 解法4 計數比較 小甲魚老師的資料結構與演算法是以c為基礎的,統計出身,沒有學過c,就換了其他的課來聽啦。現在聽的是mooc上北大的課,以python為基礎的。變位詞是指兩個詞之間存在組成字母重新排列關係,如heart和earth,python和typhon。為了簡...

資料結構與演算法之美01 開篇詞

作者是王爭,畢業於西安交通大學計算機專業。現在回想起來,本科畢業的時候,我的程式設計水平其實是很差的。直到讀研究生的時候,乙個師兄給了我一本 演算法導論 說你可以看看,對你的程式設計會很有幫助。沒想到,從此我對演算法的 迷戀 便一發不可收拾。之後,我如飢似渴地把圖書館裡幾乎所有資料結構和演算法書籍都...