IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Хранение словаря с использованием нагруженного дерева
Dmitri
сообщение 9.06.2008 17:21
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Здравствуйте!!! Нужно создать объект, содержащий методы: добавление слова в словарь, проверка на наличие слова в словаре, удаление слова из словаря. Хранится это все должно как бинарное дерево. Заранее благодарен
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.06.2008 18:06
Сообщение #2


Гость






В чем сложности? Не знаешь, что такое "нагруженное дерево"? У Ахо/Хопкрофта/Ульмана в "Структурах данных и алгоритмах" начиная со стр. 152 очень хорошо описывается эта тема.
 К началу страницы 
+ Ответить 
Dmitri
сообщение 14.06.2008 18:37
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Сложность состоит в удалении слова из словаря, не могу придумать, как осуществить, а в целом вроде бы так:

unit dict;

interface

type PNode=^TNode;
abc=array['a'..'z'] of PNode;
TNode=record
mas:abc;
kon:boolean;
end;

TDict=object
private
root:PNode;
public
constructor Init;
destructor Done;
function Put(s:string):boolean;
function IsPresent(s:string):boolean;
procedure Print;
end;

implementation

constructor TDict.Init;
var i:char;
begin
new(root);
For i:='a' to 'z' do
root^.mas[i]:=nil;
root^.kon:=false;
end;

destructor TDict.Done;
procedure DelEl(p:PNode);
var i:char;
begin
for i:='a' to 'z' do
if p^.mas[i]<>nil then DelEl(p^.mas[i]);
dispose(p);
end;
begin
DelEl(root);
end;

function TDict.Put(s:string):boolean;
var i:char;
p,q:PNode;
j,k:integer;
begin
p:=root;
k:=1;
while (k<=length(s)) and (p^.mas[s[k]]<>nil) do
begin
p:=p^.mas[s[k]];
k:=k+1;
end;
For j:=k to length(s) do
begin
new(q);
p^.mas[s[j]]:=q;;
for i:='a' to 'z' do q^.mas[i]:=nil;
q^.kon:=false;
p:=q;
end;
p^.kon:=true;
end;

function TDict.IsPresent(s:string):boolean;
var k:integer;
p:PNode;
begin
while (k<=length(s)) or (p^.mas[s[k]]<>nil) do
begin
p:=p^.mas[s[k]];
k:=k+1;
end;
if k=length(s) then IsPresent:=p^.kon;
end;

procedure TDict.Print;
var f:text;
procedure output(p:PNode; s:string);
var i:char;
begin
if p^.kon then writeln(f,s);
for i:='a' to 'z' do
if p^.mas[i]<>nil then output(p^.mas[i],s+i);
end;
begin
assign(f,'I:\file.txt');
rewrite(f);
output(root,'');
close(f);
end;

End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 11.08.2025 1:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"