Muxammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali
Download 352.7 Kb.
|
8-laboratoriya ishi
Дастур матни:
Файл main.cpp: #include #pragma hdrstop #include "Main.h" #pragma package(smart_init) #pragma resource "*.dfm"
class ID //Описание класса { public:
AnsiString Name; int Right; int Left; ID()
{ Right = 0; Left = 0; } int Hash() { char *str; str = Name.c_str(); return (str[0]|str[1]); } }; ID *IDTbl; int *HashTbl; int CollisionQuantity=0; int CompareQuantity=0; void MakeTreeNode(ID *IDTable, int HashIndex, int IDIndex) { //Построение бинарного дерева if (IDTable[HashIndex].Name>IDTable[IDIndex].Name) { if (!IDTable[HashIndex].Right) IDTable[HashIndex].Right = IDIndex; else
MakeTreeNode(IDTable,IDTable[HashIndex].Right,IDIndex); } if (IDTable[HashIndex].Name if (!IDTable[HashIndex].Left) IDTable[HashIndex].Left = IDIndex; else
MakeTreeNode(IDTable,IDTable[HashIndex].Left,IDIndex); }
} void HashTreeBuild(ID *IDTable, int *HashTable, int N) { for (int i=0; i<=N; i++) { if (!HashTable[IDTable[i].Hash()]) HashTable[IDTable[i].Hash()] = i; else
{ CollisionQuantity++; MakeTreeNode(IDTable, HashTable[IDTable[i].Hash()],i); } } } __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { //Загрузка исходных данных из файла mmOut->Lines->LoadFromFile("Input.txt"); int N = mmOut->Lines[0].Count; ID *IDTable; IDTable = new ID [N+1]; for (int i=1; i<=N; i++) IDTable[i].Name = mmOut->Lines[0][i-1]; //Заполнение хэш-таблицы нулевыми значениями int *HashTable; HashTable = new int [256]; for (int i=0; i<=255; i++) HashTable[i]=0;
for (int i=1;i<=N;i++) mmDebug->Lines->Add(IntToStr(i)+" "+ IDTable[i].Name+" "+ IntToStr(IDTable[i].Hash())+" "+ IntToStr(IDTable[i].Left)+" "+ IntToStr(IDTable[i].Right)); mmOut->Clear(); mmOut->Lines->Add("Введите имя искомого идентификатора"); mmOut->Lines->Add("Коллизий:"+IntToStr(CollisionQuantity)); IDTbl = IDTable; HashTbl = HashTable; } int GetIDIndex(ID SearchID, ID *IDTable, int HashIndex) { //0-если не нашел, или индекс в IDTable int IDIndex = 0; if (IDTable[HashIndex].Name==SearchID.Name) { CompareQuantity++; return HashIndex; } if (IDTable[HashIndex].Name>SearchID.Name) { CompareQuantity++; if (IDTable[HashIndex].Right) return GetIDIndex(SearchID,IDTable,IDTable[HashIndex].Right); else return 0; } else { CompareQuantity++; if (IDTable[HashIndex].Left) return GetIDIndex(SearchID,IDTable,IDTable[HashIndex].Left); else return 0; } } void __fastcall TfrmMain::Button1Click(TObject *Sender) { //Поиска идентификатора и выдача результата AnsiString SearchString = edtSearch->Text; ID SearchID; SearchID.Name = SearchString; int Hash = SearchID.Hash(); int HashIndex; int IDIndex; HashIndex = HashTbl[Hash]; CompareQuantity=0; IDIndex = GetIDIndex(SearchID,IDTbl,HashIndex);
if (IDIndex) { mmOut->Lines->Add("Идентификатор найден, его индекс в таблице идентификаторов:"+IntToStr(IDIndex)); mmOut->Lines->Add("Сравнений:"+IntToStr(CompareQuantity)); } else { mmOut->Lines->Add("Идентификатор не найден"); mmOut->Lines->Add("Сравнений:"+IntToStr(CompareQuantity)); } } Download 352.7 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling