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

Телефонная книжка и хэш-таблица - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что не так с кодом? http://www.cyberforum.ru/cpp-beginners/thread525906.html
#include <tchar.h> #include <math.h> #include <iostream.h> //--------------------------------------------------------------------------- int Kol(int Chislo){ int kol=0; int Chislo1=Chislo; ...
C++ Чтение и запись *.doc,*.docx на диск Всем привет!! У Лафоре очень хорошо объяснено и показано запись и считывание файлов с диска с файлами в форматах *.txt and *.dat.Но у меня задача стоит по другому. Мне необходимо считать уже... http://www.cyberforum.ru/cpp-beginners/thread525902.html
Сумма элементов массива, расположенных между первым и последним положительным элементом C++
Вычислить сумму элементов массива, расположенных между первым и последним положительными элементами. Вот что получилось... #include "stdafx.h" #include <iostream.h> void main(void) {...
C++ Объявить массив целых чисел и заполнить его случайными значениями.
помогите пожалуста а то вообще неразбираюсь... Задание Объявить массив целых чисел и заполнить его случайными значениями. Размер массива и диапазон значений его элементов заданы в Вашем...
C++ Как строки с шестнадцатеричным содержимым записать в биты char? http://www.cyberforum.ru/cpp-beginners/thread525899.html
Доброго времени суток, Уважаемые! Дано задание - сформировать приложение, с помощью которого необходимо записать шестнадцатеричные цифры, которые вводим на форме в компоненты Edit, выбираем из...
C++ Одномерный массив В одномерном массиве, состоящем из n вещественных элементов, вычислить: -количество отрицательных элементов массива; -сумму модулей элементов массива, расположенных после минимального по модулю... подробнее

Показать сообщение отдельно
FYlhtq_163_93
5 / 5 / 1
Регистрация: 27.12.2010
Сообщений: 29

Телефонная книжка и хэш-таблица - C++

22.03.2012, 21:37. Просмотров 1429. Ответов 7
Метки (Все метки)

Ребят, помогите кто может! Мне нужно реализовать телефонную книжку в виде хэш-таблицы. ХТ реализую через классы(сначала класс односвязного списка, а таблица представлена как массив списков). Как реализовать добавление элемента в хэш-таблицу? Прикрепляю два кода: класс список:
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
 
struct Node
{
    char* phone[10];
    char* name;
    Node *next;
};
typedef Node* Pnode;
 
class List
{
private:
    Pnode Head;
    Pnode Tail;
 
    Pnode Search(char* newphone, char* newname){
        Pnode p=Head;
        while(p!=NULL && newphone!=p->phone && newname!=p->name)    p=p->next;
        return p;
    }
 
    /*
    Pnode Copy_list(Pnode PrevNode, Pnode OrigNode){
        if(OrigNode!=NULL){
            Pnode q = new Node;
            q->phone=OrigNode->phone;
            q->prev=PrevNode;
            q->next=Copy_list(q,OrigNode->next);
            return q;
        }
        return NULL;
    }
    */
 
public:
    int Find(char* newphone, char* newname, char* &count){
        count=1;
        Pnode p=Head;
        while(p!=NULL && newphone!=p->phone && newname!=p->name){   p=p->next; count++;}
        if(p!=NULL) return 1;
        else return 0;
    }
 
    int Add(char* newphone, char* newname){
        Pnode q= Search(newphone, newname) ;
 
        if(q!=NULL && q->phone==newphone  && newname!=p->name) return 0;
 
    //--Create------------------------------------
        Pnode Newnode= new Node;
        Newnode->next=NULL;
        Newnode->phone=newphone;
        Newnode->name=newname;
    //--return newnode----------------------------
    //--add last----------------------------------
            {
            Tail->next=Newnode;
            Tail=Newnode;
            }
        }
       return 1;
    }
 
    void Print(){
        Pnode p=Head;
        int count=1;
 
        while(p!=NULL)
        {
            cout<<"name "<<p->name<<" phone"<<p->phone;
            p=p->next;
        }
    }
 
    int Delete(char* newphone, char* newname){
        Pnode q= Search(newphone, newname);
 
        if(q==NULL) return 0;
    
        if(q->next==Tail){
    //--delete last------------------------
            Tail->prev->next=NULL;
            Tail=Tail->prev;
        }
        delete q;
        return 1;
    }
    
    List(){
        Head=NULL;
        Tail=NULL;
    }
 
    List(List& orig){
        if(this!=&orig)
            if(orig.Head!=NULL){
                Head =new Node;
                Head->phone=orig.Head->phone;
                Head->name=orig.Head->name;
                Head->next=NULL;
 
                Tail=Head;
 
                bool first=true;
                for(Pnode Q=NULL, OrigNode=orig.Head->next ; 
                    OrigNode != NULL ;
                    Tail= Q, OrigNode = OrigNode->next){
                    
                        Q = new Node;
                        Q->phone=OrigNode->phone;
                        Q->name=OrigNode->name;
                    }
 
                if(Tail!=Head) Tail->next=NULL;
            }
            else List();
    }
 
 
    ~List(){
        if(Head!=NULL){
            Pnode p=Head, q=Head->next;
            while(p!=NULL){
                delete p;
                p=q;
                if(q!=NULL) q=q->next;
            }
        }
    }
};
реализация хэша(в list.hpp лежит список):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "list.hpp"
const int hashsize=100;
class hash
{
      List hash[hashsize];
private:
        int hashfunc(char* num){
            int numlast;
            char* numch1;
            numch=&(num[8]);
            return atoi(numch);
        }
public:
      int ins_hash(newphone,newname){
          int hashkey=hashfunc(newphone);
          /*вот тут у меня возникает вопрос*/
          Add(newphone,newname); 
      }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru