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

 

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