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

Хешированный список - C++

Восстановить пароль Регистрация
 
xbifx
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 37
25.05.2012, 16:06     Хешированный список #1
Все привет!
Как реализовать в основной памяти хешированный список?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2012, 16:06     Хешированный список
Посмотрите здесь:

C++ std::sort. Как сортировать список? (список указателей на объект)
Упорядочить список студентов по среднему баллу и вывести весь список C++
C++ Список: Как добавлять элемент в список, не в начало и не в конец, а между 1 и 2 элементами списка?
C++ 3 класса: список, стек(как список), очередь(как список)
list. Cоздать список из результатов(с массивами), а потом просмотреть весь список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
25.05.2012, 16:21     Хешированный список #2
Например вот-так:
C++
1
2
3
4
5
typedef struct Hash
{
      int nKey;
      char* value;
}HASH, *PHASH;
C++
1
HASH* pHash = new HASH[100];
Обрабатывать хеш-массив при помощи хеш-функций поиска, сортировки по заданому ключу nKey
xbifx
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 37
25.05.2012, 16:34  [ТС]     Хешированный список #3
Как к примеру, реализовав хешированный список пассажиров, при запросе имени выводить полную информацию обо всех списках и очередях, в которых он находится? Как систему эту организовать, до меня не доходит почему то?
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
25.05.2012, 17:02     Хешированный список #4
Например вот-так:

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
typedef struct Queue
{
     char* name;
     int id;
} QUEUE, PQUEUE;
 
typedef struct Passanger
{
     char* name;
     QUEUE* pQueue;
} PASSINFO, *PPASSINFO;
 
while (pHash != NULL)
{
    if (!strcmp(pHash->name,name))
    {
        printf("%s\n",pHash->name);
        for (int k = 0; pHash->pQueue[k].id != 0; k++)
             printf("%s %s\n",pHash->pQueue[k].id,
                  pHash->pQueue[k].name);
        printf("\n");
    }        
 
    pHash++;
}
xbifx
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 37
26.05.2012, 16:12  [ТС]     Хешированный список #5
У тебя есть время написать что нужно добавить в прогу чтоб она работала? Я не понимаю как этим пользоваться
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.05.2012, 22:15     Хешированный список #6
Демонстрационная программа сначала заполняет хеш фамилиями из
файла и случайн. знач. индент. очередей, далее производит поиск по
хешу по заданной фамилии:

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
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
 
#include <iostream>
#include <fstream>
 
typedef struct Queue
{
     char* name;
     int id;
} QUEUE, PQUEUE;
 
typedef struct Passanger
{
     char* name;
     QUEUE* pQueue;
} PASSINFO, *pHash;
 
using namespace std;
 
#define _SIZE 100
 
int main()
{
    static char name[256] = "\0";
    printf("Enter passanger name: "); gets(name);
 
    const char* filename = "input.txt";
    ifstream ifs(filename, ifstream::in);
 
    PASSINFO* pHash = new PASSINFO[_SIZE];
    memset((void*)pHash, 0x00, _SIZE * sizeof(PASSINFO));
 
    char* line = new char[80]; int i = 0;
    while ((ifs.peek() >= 0) && (ifs.getline(line,80)))
    {
        pHash[i].name = new char[80];
        strcpy_s(pHash[i++].name, 80, line);
    }
 
    for (int i = 0; pHash[i].name != NULL; i++)
    {
        int count = rand() % 10 + 1;
        pHash[i].pQueue = new QUEUE[count];
        memset((void*)pHash[i].pQueue, 
            0x00, count * sizeof(QUEUE));
 
        for (int k = 0; k < count; k++)
        {
            pHash[i].pQueue[k].id = rand() % 999 + 1;
            pHash[i].pQueue[k].name = new char[256];
            sprintf(pHash[i].pQueue[k].name,"Queue%d_%d",i,k);
        }
    }
 
    while (pHash->name != NULL)
    {
         if (!strcmp(pHash->name,name))
         {
             printf("%s\n",pHash->name);
             for (int k = 0; pHash->pQueue[k].id > 0; k++)
                  printf("%d %s\n",pHash->pQueue[k].id,
                          pHash->pQueue[k].name);
             printf("\n");
         }        
 
         pHash++;
    }
 
    return 0;
}
Input.txt:
Ivanov
Petrov
Safonov
Kirilov
Stepanov
Rybakov
Pavlov
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.05.2012, 23:08     Хешированный список #7
Высылаю .exe-файл и input.txt:
Вложения
Тип файла: zip Test2.zip (20.9 Кб, 8 просмотров)
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.05.2012, 23:20     Хешированный список #8
Высылаю .exe-файл в архиве.
Вложения
Тип файла: zip Test2.zip (20.9 Кб, 5 просмотров)
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.05.2012, 23:28     Хешированный список #9
Высылаю последнюю версию .exe-файла и input.txt:
Вложения
Тип файла: zip Test2.zip (20.9 Кб, 7 просмотров)
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.05.2012, 23:44     Хешированный список #10
xbifx, постарайтесь разобраться в написанной программе, и скомпилировать ее.
Код был написан и отлажен в VC++ 2010.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 23:50     Хешированный список
Еще ссылки по теме:

C++ Необходимо создать список, элемент которого может быть список
Создать список, после каждого отрицательного числа вставить в список 0 C++
Напечатать пронумерованный список список первых 10 наиболее популярных газет C++

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

Или воспользуйтесь поиском по форуму:
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
26.05.2012, 23:50     Хешированный список #11
Вот, в архиве проект для VC++ 2010:
Вложения
Тип файла: zip proj.zip (3.13 Мб, 9 просмотров)
Yandex
Объявления
26.05.2012, 23:50     Хешированный список
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru