演算法精解 10 鏈式雜湊表的應用 符號表

2021-08-05 21:38:08 字數 901 閱讀 7696

應用簡介:雜湊表會應用於編譯器中,滿足快速訪問符號資訊的需求。把原始碼中有組織的字元轉換為有意義的字串(語義轉換),一般儲存符號的兩個屬性:語義和標記型別。

每次從輸入字串流中接收乙個字串,預設字串之間以空格隔開。如果該字串為全數字標價記為digit;否則為other。

#ifndef _lex_h

#define _lex_h

typedef enum _token token;

//桶中每個鍊錶節點data指向symbol

typedef struct _symbolsymbol;

#endif

#include 

#include

#include

#include

#include "lex.h"

#include "../chtbl/chtbl.h"

//istream為輸入流, symtbl為鏈式雜湊表

//返回插入元素的型別

token lex(const

char *istream, chtbl *symtbl)

length = strlen(symbol->lexeme);

//判斷該字串是不是數字

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

memcpy(&token, &symbol->token, sizeof(token));

//向雜湊表中插入符號 ,以結構體symbol為元素

if((retval = chtbl_insert(symtbl, symbol)) < 0)

else

if(retval == 1)

return token;

}

演算法導論 雜湊表的數學分析(精解)鍊錶法

雜湊表的具體實現就不多做介紹了,就是乙個陣列,每個下標儲存的是碰撞的元素的煉表頭指標,如下圖所示 給定乙個能存放n個元素的 具有m個槽位的雜湊表t,定義t的裝載因子 為n m,即乙個鏈中平均儲存的元素數。用鏈結法雜湊的最壞情況效能很差 所有的n個關鍵字都雜湊到同乙個槽中,從而產生出乙個長度為n的鍊錶...

演算法精解 5 鍊錶應用 虛擬記憶體頁幀管理

1 系統實體地址空間可能沒有實際位址空間大 即虛擬位址空間,由位址線長度決定 虛擬記憶體是一種位址空間對映機制,它允許程序 執行的程式 不必完全載入到物理記憶體中也可以得到執行,程序操作的是虛擬位址。2 虛擬記憶體與物理記憶體的對映關係由頁表中的條目決定,mmu會根據程序號和程序所使用的虛擬記憶體自...

演算法精解 C語言描述 鍊錶 迴圈鍊錶的實現與分析

同單鏈表相似,迴圈鍊錶中的每個元素也包含兩個部分 乙個資料域指標和乙個指向後繼元素的next指標。資料結構clistelmt代表迴圈鍊錶中的單獨元素。該結構體擁有兩個成員,如上面所述。資料結構clist代表迴圈鍊錶。這個結構體同單鏈表相似,但它不包含tail成員。clist.h ifndef cli...