從標準輸入中讀入乙個英文單詞及查詢方式,在乙個給定的英文常用單詞字典檔案dictionary3000.txt中查詢該單詞,返回查詢結果(
查詢到返回1,否則返回0
查詢方式說明:查詢方式以1~4數字表示,每個數字含義如下:
1:在單詞表中以順序查詢方式查詢,因為單詞表已排好序,遇到相同的或第乙個比待查詢的單詞大的單詞,就要終止查詢;
2:在單詞表中以折半查詢方式查詢;
3:在單詞表中通過索引表來獲取單詞查詢範圍,並在該查詢範圍中以折半方式查詢。索引表構建方式為:以26個英文本母為頭字母的單詞在字典中的起始位置和單詞個數來構建索引表,如:
字母起始位置
單詞個數a0
248b
248167……
…該索引表表明以字母a開頭的單詞在單詞表中的開始下標位置為0,單詞個數為
248。
4:按下面給定的hash函式為字典中單詞構造乙個hash表,hash衝突時按字典序依次存放單詞。hash查詢遇到衝突時,採用鏈位址法處理,在衝突鍊錶中找到
或未找到(遇到第乙個比待查詢的單詞大的單詞或鍊錶結束)便結束查詢。
/* compute hash value for string */
#define nhash 3001
#define mult 37
unsigned int hash(char *str)
【輸入形式】
單詞字典檔案dictionary3000.txt存放在當前目錄下,待查詢單詞和查詢方式從標準輸入讀取。待查詢單詞只包含英文小寫字母,與表示查詢方式的整數之間以乙個空格分隔。
【輸出形式】
wins 1 0 3314
wins 2 0 12
wins 3 0 7
wins 4 0 2
yes 1 1 3357
yes 2 1 10
yes 3 1 4
yes 4 1 1
【樣例說明】
wins在單詞字典中不存在,4種查詢方式都輸出結果0,順序查詢、折半查詢、索引查詢和hash查詢的單詞比較次數分別為:3314、12、7和2次(wins的hash位置與字典中physics和suggest相同)。
yes在單詞字典中存在,4種查詢方式都輸出結果1,順序查詢、折半查詢、索引查詢和hash查詢的單詞比較次數分別為:3357、10、4和1。
#include#include#includestruct word_list;
struct word_list word_block[3510];
struct index;
struct index index_list[26];
#define nhash 3001
#define mult 37
unsigned int hash(char *str)
typedef struct nodelnode, *linklist;
void order_search(struct word_list word_block, char obj);
void bisearch(struct word_list word_block, char obj );
void index_search(struct index index_list, char obj );
void insert(linklist list, char temp);
int total = 0;
int main()
for(loop=0; loop<26; loop++)
index_list[0].alpha = 'a';
index_list[0].start = 0;
while( !feof(in) )
hash_value = hash(temp); /*計算出它的雜湊值*/
if( hash_list[hash_value]->link == null )
else if( hash_list[hash_value]->link != null )
i++;
}index_list['z'-'a'].all--;
total = i-1;
scanf("%s %d", &obj, &method);
if( method == 1) /*order search*/
else if(method ==2)
else if (method == 3)
else if(method == 4)
if( strcmp(p->word , obj) == 0)
else
} fclose(in);
return 0;
}void order_search(struct word_list word_block, char obj)
else
}}void bisearch( struct word_list word_block, char obj )
else if( strcmp( word_block[mid].word, obj ) < 0)
else
}if(find == 0)
}void index_search( struct index index_list, char obj )
else if( strcmp( word_block[mid].word, obj ) < 0)
else
}if(find == 0)
}void insert(linklist list, char temp) /*大指標陣列內的某個元素 是該鍊錶的頭結點*/
p = (linklist)malloc(sizeof(lnode));
strcpy(p->word, temp);
p->link = null;
r->link = p;
}
綜合模糊查詢
建立函式 create function dbo m fuzzyquery v1 str nvarchar 2000 returns nvarchar 2000 as begin declare count int i int declare newchar nvarchar 200 nn nvar...
爬蟲 綜合案例流程版
通常在開發過程中不可能一下子就把init寫得完整,先把最易用到的,已經想到的初始化,後面的在編寫其他函式想到時再來init裡編寫 使用不同的佇列會造成bfs和dfs的效果 使用先進先出佇列產生廣度優先搜尋,使用先進後出 棧 產生深度優先搜尋 text 返回的是unicode 型的資料,一般是在網頁的...
單詞查詢樹
兩種方法 給出一些列號碼,若果任乙個號碼不在另乙個中充當字首,那麼這系列號碼是合理的輸出yes,否則輸出no 思路 標頭檔案中find函式的使用,按長度從小到大排列,那麼能當另乙個號碼字首的只能是前乙個當後乙個的字首,所以乙個乙個找 時間複雜度 o n include include include...