字典樹(trie樹)的指標簡單實現pascal

2022-05-30 18:00:19 字數 1971 閱讀 9470

問題1:給你乙個單詞集合,支援新增,刪除,詢問某個單詞出現次數。

const maxword=100

; maxn=100

;type

dictree=^rec;

rec=record

next:array[

1..maxword]of dictree;

val:boolean;

cnt:longint;

end;

var a:array[1

..maxn]of rec;

root:dictree;

i,n:longint;

s:string

; ch:

char

;procedure delete(s:

string

);var

p,newnode:dictree;

x,i,j:longint;

begin

p:=root;

for i:=1 to length(s) do

begin

x:=ord(s[i]);

if (p^.next[ord(s[i])]=nil) then exit

else p:=p^.next[x];

end;

p^.cnt:=0

; p^.val:=false

;end;

procedure insert(s:

string

);

varp,newnode:dictree;

x,i,j:integer;

begin

p:=root;

for i:=1 to length(s) do

begin

x:=ord(s[i]);

if p^.next[ord(s[i])]=nil then begin

new(newnode);

for j:=1 to maxn do newnode^.next[j]:=nil;

p^.next[x]:=newnode;

p:=newnode;

end

else p:=p^.next[x];

end;

inc(p^.cnt);

end;

function find(s:

string

):longint;

varp:dictree;

i,x:longint;

begin

p:=root;

for i:=1 to length(s) do

begin

x:=ord(s[i]);

if p^.next[ord(s[i])]=nil then exit(0

)

else p:=p^.next[x];

end;

exit(p^.cnt);

end;

begin

new(root);

root^.cnt:=0

; fillchar(root^.cnt,sizeof(root^.cnt),0

); writeln(

'// a:add.');

writeln(

'// d:delete.');

writeln(

'// q:query.');

readln(n);

for i:=1 to n do

begin

readln(ch);

readln(s);

case

ch of

'a':insert(s);

'd':delete(s);

'q':writeln(find(s));

end;

end;

end.

問題2:給你乙個單詞集合,支援新增,刪除,詢問以某個字串為字首的單詞個數

Trie樹(字典樹)的實現

trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...

trie樹 字典樹 介紹及簡單實現

第一次接觸trie樹,翻了一些演算法樹竟然沒有找到。於是在google上各種查詢,現在對自己所了解的trie總結一下,以便將來複習,並給出簡單的實現。trie,又稱字典樹 單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是 利用字串的公共字首來節約儲存空間。相對來說,trie樹是一種比較簡單...

trie樹 字典樹 java實現

public class trie public void insert string word else current.count current.isend true 怎麼判斷單詞是否存在?被判斷的單詞的字母與根節點下的子節點的字母進行比較,直到匹配到兩者最後乙個字母相同,並且最後乙個節點的i...