習題5 13 詞頻統計

2021-10-02 12:19:45 字數 2351 閱讀 6429

感謝 @guaiguaitinghua 的歸併鍊錶排序

思路:構建鏈式雜湊表,再組合成按詞頻逆序、字典序順序排列的鍊錶

主要的幾個問題:

資料結構的構建(鏈式雜湊表)

讀入單詞並忽略大小寫(統一轉換成小寫)

鍊錶排序,如果詞頻一樣比較字典序

#include

#include

#include

#include

#include

#define percent 10

#define maxtablesize 200

#define tablesize 100

#define wordlen 15

typedef

char

*elementtype;

typedef

struct lnode *ptrtolnode;

struct lnode

;typedef ptrtolnode position;

struct hnode

;typedef

struct hnode *hashtable;

intnextprime

(int n)}if

(i ==2)

else

}return p;

}int

hash

(const

char

*key,

int tablesize)

return h % tablesize;

}char

tolowercase

(char c)

bool iswordcharacter

(char c)

bool isupper

(char c)

bool getword

(elementtype str, elementtype word,

int*start)

word[len++

]= c;

}else

}else

if(len)}}

*start = i;

word[len]

='\0'

;return flag;

}bool compare

(elementtype a, elementtype b)if(

*a &&

*b)return

*a ? false : true;

} hashtable createtable()

return h;

}position find

(hashtable h, elementtype key)

return p;

}void

insert

(hashtable h, elementtype key)

else

}void

destroytable

(ptrtolnode head)

}ptrtolnode merge

(ptrtolnode p1, ptrtolnode p2)

else

if(p1->count < p2->count)

else

else

} p = p->next;}if

(p1)

if(p2)

return head->next;

}ptrtolnode sort

(ptrtolnode head)

slow = fast = pre = head;

while

(fast && fast->next)

pre->next =

null

;return

merge

(sort

(head)

,sort

(slow));

}void

print

(hashtable h)

}printf

("%d\n"

, h->head[h->size]

->count)

; head->next =

sort

(head->next)

; p2 = head->next;

while

(size--

&& p2)

destroytable

(head);}

intmain()

}}}print

(h);

//fclose(stdin);

return0;

}

習題5 13 詞頻統計 30分

請編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10 的單詞。所謂 單詞 是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的 單詞字元 為大小寫字母 數字和下劃線,其它字元均認為是單詞分隔符。輸入給出一段非空文字,最後以符號 ...

PTA 詞頻統計

請編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10 的單詞。所謂 單詞 是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的 單詞字元 為大小寫字母 數字和下劃線,其它字元均認為是單詞分隔符。輸入給出一段非空文字,最後以符號 ...

詞頻統計(上機)

include include include define error 1 define ok 0 const int word length 250 定義單個單詞最大長度 typedef int status 定義儲存單詞及其出現次數的結構體 typedef struct nodewordnod...