Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 12
1

Линейное зондирование: При обнаружении такого же ключа запись добавляется в конец списка с идентичным ключем

30.05.2012, 01:21. Показов 2401. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять что не так. Тип разрешения коллизий линейное зондирование. При обнаружении такого же ключа запись добавляется в конец списка с идентичным ключем, хотя в принципе должен даваться уникальный ключ. Вот код:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
 
namespace Курсовая
{
    public class HashTable
    {
        public Strana[] st;    //массив элементов хеш-таблицы
        int n, m;   //количество элементов в хеш-таблице, максимальное количество элементов в хеш-таблицы
        Strana nullItem;   //пустой элемент
 
        public HashTable(int maxN)  //конструктор с параметром
        {
            n = 0;
            m = 2 * maxN;
            st = new Strana[m];
            nullItem = null;
        }
 
        public int Hash(string v, int m) //статический метод - хеш-функция
        {
            int h = 0, a = 127;
            foreach (char ch in v)
                h = (a * h + ch) % m;
            return h;
        }
 
        public int Count //свойство - количество элементов в хеш-таблице
        {
            get
            {
                return n;
            }
        }
 
        public void Insert(Strana item)  //метод добавления элемента в хеш-таблицу
        {
            if (Search(item.Key()) != nullItem)
                MessageBox.Show("Такой элемент уже есть в хеш-таблице");
            int i = Hash(item.Key(), m);
            while (st[i] != nullItem)
                i = (i + 1) % m;
            st[i] = item;
            n++;
        }
 
        public void Remove(Strana x)  //метод удаления элемента из хеш-таблицы
        {
            int i = Hash(x.Key(), m), j;
            while (st[i] != nullItem)
                if (x.Key() == st[i].Key())
                    break;
                else
                    i = (i + 1) % m;
            if (st[i] == nullItem)
                return;
            st[i] = nullItem;
            n--;
            for (j = i + 1; st[j] != nullItem; j = (j + 1) % m, n--)
            {
                Strana v = st[j];
                st[j] = nullItem;
                Insert(v);
            }
        }
 
        public Strana Search(string v) //метод поиска элемента в хеш-таблице
        {
            int i = Hash(v, m);
            while (st[i] != nullItem)
                if (v == st[i].Key())
                    return st[i];
                else
                    i = (i + 1) % m;
            return nullItem;
        }
    }
}
Поправте пожалуйста если что не так а если так то просто отпишите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2012, 01:21
Ответы с готовыми решениями:

Неправильно добавляется запись в конец файла
У меня возникла проблема с добавлением строки в конец файла. Все работает, но по какой-то...

Если слово встретилось первый раз, то для него добавляется новый элемент в конец списка
Разработайте программу, которая читает из стандартного потока ввода слова и размещает их в связный...

Запись видео со звуком с вебкамеры при обнаружении движения
Нужна программа, которая бы писала видео (обязательно со звуком) в отдельные файлы, когда перед...

При обновлении страницы добавляется старая запись
Помогите пожалуйста. Куда тут писать header или как? Чтобы при обновлении запись не добавлялась ...

4
Футболист
532 / 434 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
30.05.2012, 01:33 2
(называют методом линейных проб). Идея состоит в том, что сталкиваясь с коллизией при включении записи, мы последовательно (циклически, с переходом через конец на начало) просматриваем массив в поиске первого незанятого элемента. Если такой элемент обнаруживается, в него и заносится включаемая запись.

Елемент добовляеться не в конец массива, а в следующюю незанятую ячейку.
0
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 12
30.05.2012, 01:37  [ТС] 3
В принципе оно и добавляет в свободную ячейку. Но блин ключ то остается тем же...... Или я просто не понял?
0
Футболист
532 / 434 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
30.05.2012, 01:40 4
Ключ тот же помойму. Блин, проходили ето год назад, а уже не помню. Кошмар
0
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 12
30.05.2012, 01:53  [ТС] 5
Если ключ тот же то это хорошо.
0
30.05.2012, 01:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2012, 01:53
Помогаю со студенческими работами здесь

Как дописывать новые значения в конец ini файла, меняя при этом имя ключа?
Допустим есть ini файл, где есть строки: 1=asdfg 2=asdfgyuiio как записывать новые...

Добавить запись SQL-запросом: "Ошибка при обнаружении указанного сервера или экземпляра"
Добрый вечер, пытаюсь добавить запись в таблицу и выбивает ошибку "Additional information: При...

Запись элемента (в начало и в конец) и доступ к i-ому элементу двусвязного списка
Народ!Помогите написать прожку на С++ - двусвязный список из целочисленных элементов. Надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru