Форум программистов, компьютерный форум CyberForum.ru

Хеш таблица с функцией (метод цепочек) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Генерация случайных чисел http://www.cyberforum.ru/cpp-beginners/thread989701.html
Здравствуйте! Помогите, пожалуйста, реализовать алгоритм, который генерирует случайные числа с равномерным распределением методом Фибоначчи. Без использования уже готовых библиотечных функций.
C++ Класс. Конструктор. Деструктор Я только начал изучать этот язык, но пока что ничего не получается... Помогите пожалуйста, заранее спасибо большое :) Пользовательский класс должен содержать необходимые элементы-данные, метод инициализации исходные значения: Void set (double X, ...); метод печати: Void print (void); http://www.cyberforum.ru/cpp-beginners/thread989693.html
Восстановление исходных данных C++
Добрый день! Подскажите пожалуйста. У меня есть задача копирования 3 файлов в out, и наоборот, восстановление исходных файлов из out, case 1-копирование, case 2 восстановление С копированием проблем не возникло, а вот восстановление не работает, предполагаю это getline. switch(w) { case 1: char Y; out.clear();
Многомерный массив.Функции C++
Всем привет! Мне нужна помощь, скоро модуль,а я еще последней лабы не сдал.Я абсолютно не понимаю как ее сделать! Надеюсь на вашу помощь, хотя бы советом Вот обьяснение к заданиям: 1 ) Разработать функцию для генерирования массива целых чисел (от 0 до N , согласно заданию ) , используя генератор случайных чисел . Использовать функцию rand ( ) . Например для генерирования чисел из интервала...
C++ Нужно переделать функцию С++ http://www.cyberforum.ru/cpp-beginners/thread989673.html
Нужно переделать функцию, ну или решить через рекурсию. Задача состоит в том, что надо вывести все возможные индексы массива Рекурсией. я абсолютный нуб. написал программу через функцию. вот переделать не могу. #include <iostream> using namespace std; int func(int n, int m) { for(int i=0; i<=n; i++) { for(int j=0; j<m; j++) {
C++ Упорядочить байты Помогите додумать. Нужны упорядочить байты в порядке возрастания количества еденичных битов в них(ввод в шестнадцетиричнйо системе). Я понял мы вводит допустим фразу "ab5" в двоичной системе это получается 1010 1011 0101,но нам эти четверки символов надо поменять местами,тоесть надо чтоб сначала стояло то число,где больше еденичек-1011, а потом оставшиеся два.Как узнать число еденичек в этом... подробнее

Показать сообщение отдельно
Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219

Хеш таблица с функцией (метод цепочек) - C++

27.10.2013, 19:46. Просмотров 328. Ответов 0
Метки (Все метки)

Вопрос таков : как вывести на экран элементы списка при коллизии.
Т.Е. вот у нас коллизия ( а она будет, т.к. хеш функция калл редкостный), при коллизии (одинаковых адресах) Новый
ключ засовывается в новую структуру и создает собсна список. Ф-ция SHowTable. Если запустить сейчас программу, то она определит что есть коллизия и сбоку выведет |. но как мне показать элементы в этом элементе массива справа от |. Сижу часа 2. Перепробовал все подряд. Было только так что Выводило в первом элементе с коллизией сразу все элементы. ( не понял как)
P.S. Извините за неоформленные мыслы. голова кипит. первый проект со списками и с классами.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include "main.h"
 
void HashTable::CreateHashTable(){
    for (int i = 0; i < 50; i++){   
        string temp_key = CreateKey();
        int temp_adress = HashFunc(temp_key);
 
        if (Array[temp_adress].empty == true){
            Array[temp_adress].empty = false;
            Array[temp_adress].key = temp_key;
            Array[temp_adress].adress = temp_adress;
        }
        else{
            Array[temp_adress].synonym = true;
            segment* NewSynonym = new segment;
            NewSynonym->adress = temp_adress;
            NewSynonym->empty = false;
            NewSynonym->key = temp_key;
            NewSynonym->synonym = false;
            NewSynonym->new_segment = head;
            head = NewSynonym;
        }        
    }
}
 
void HashTable::AddElement(string NewElement){      
    int temp_adress = HashFunc(NewElement);
    if (Array[temp_adress].empty == true){
        Array[temp_adress].empty = false;
        Array[temp_adress].key = NewElement;
        Array[temp_adress].adress = temp_adress;
    }
    else{
        Array[temp_adress].synonym = true;
        segment* NewSynonym = new segment;
        NewSynonym->adress = temp_adress;
        NewSynonym->empty = false;
        NewSynonym->key = NewElement;
        NewSynonym->synonym = false;
        NewSynonym->new_segment = head;
        head = NewSynonym;
    }
}
 
void HashTable::ShowTable(){
    
    for (int i = 0; i < 400; i++){ ///////400 change to 1500
            if (Array[i].empty == true) cout << i + 1 << ". Empty cell !!" << endl;
            else if (Array[i].empty == false && Array[i].synonym == false){
                cout << i + 1 << ". key -> " << Array[i].key << endl;
            }
 
            else if (Array[i].empty == false && Array[i].synonym == true){
                cout << i + 1 << ". key -> " << Array[i].key<<" | " ;       
                
                /*Как вывести на экран элементы списка*/
 
 
 
                cout << endl;
            }
    }
}
 
#endif // FUNCTIONS_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef MAIN_H
#define MAIN_H
 
#include <iostream>
#include <string>
#include <time.h>
#define SegNum 1500
 
 
 
using namespace std;
 
struct segment{
    string key = "asdfgh"; //Ключ
    int adress = 0; //Адрес или сумма Аски символов
    bool empty = true;//Проверка на пустоту
    bool synonym = false; //Есть ли элемент списка (Синоним)
    segment *new_segment,*head;
};
 
class HashTable:public segment{
public:
    HashTable(){  } 
    ~HashTable(){}
    segment Array[SegNum];
public
/* that all functions with hash table*/:
    void CreateHashTable();
    void AddElement(string NewElement);
    void ShowTable();
    void FindElement();
    void DeleteElement();   
private:
    
 
    int HashFunc(string key){
        int    Adress = (key[0] + key[1] + key[2] + key[3] + key[4] + key[5]);
        return Adress;
    }
    string CreateKey(){
       string key = "_temp_";
        for (int i = 0; i < 6; i++){
            if (i == 0 || i == 4 || i == 5)
                key[i] = rand() % 26 + 65;
            else
                key[i] = rand() % 10 + 48;
        }
        return key;
    }
};
 
 
 
 
 
#endif // MAIN_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "main.h"
#include "functions.h"
#include <time.h>
 
int repeat(string y);
 
int main(){
    system("cls");
    srand(time(NULL));
    HashTable MyHashTable;
    segment MySegment;
    string reapeat_program;
    string NewElement;  //For Creating New Element
    string y="y"; //For Cycle of program
    int PersKey;
    while (y == "y"){
        system("cls");
    cout<<"What do you want to do? "<<endl;
    cout<<"1-Create new Hash Table "<<endl;
    cout<<"2-Add new element"<<endl;
    cout<<"3-Show my hash table"<<endl;
    cout<<"4-Find element"<<endl;
    cout<<"5-Delete Element"<<endl;
    cout<<"-> ";cin>>PersKey;   
        switch (PersKey) {
        case 1:
            MyHashTable.CreateHashTable();
            cout << "Hash Table was Created!!!" << endl;
            cout << "Do you want choose other function? y/n ->";
            cin >> y;
            break;
        case 2:
            cout << "Enter name of element (AcccAA type) ->";
            cin >> NewElement;
            MyHashTable.AddElement(NewElement);
            cout << "Element " << NewElement << " was succesfully added!!" << endl;
            cout << "Do you want choose other function? y/n ->";
            cin >> y;
            break;
        case 3:
            MyHashTable.ShowTable();            
            cout << "Do you want choose other function? y/n ->";
            cin >> y;
            break;
        case 4:
 
            cout << "Do you want choose other function? y/n ->";
            cin >> y;
            break;
        case 5:
 
            cout << "Do you want choose other function? y/n ->";
            cin >> y;
            break;
 
        default:
            system("cls");
            cout << "You placed incorrect number!!!,retry" << endl;
            system("pause");
            y = "y";
            break;
        }
    
   }
    return 0;
}
Добавлено через 1 час 27 минут
Закрыто.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru