Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2011, 20:11   #1
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию хеширование

Доброго времени суток ...
помогите разобраться .. что не так ?
Код:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <time.h>
#include <math.h>
#define k 10
#define HASHSIZE 3000 //размер таблицы                                                                                                                 
int inode,i,nk,hx;
char *menu[k][40];
void main_menu(void);

struct hash{
   char *name;
   char *key;
  struct hash *next;
};
static struct hash *table[HASHSIZE];

hash(char *key, int nk){
  struct hash p;
const c=2,d=3;//hx -указатель на текущий элемент с и d - const                                                                                         
   inode=nk+c*hx+d*hx*hx;
   inode =hx;
if (inode> HASHSIZE-1)
     inode=hx-HASHSIZE;
 return inode;
}

char *strsave(s)
     char *s;{
  char *p;
  if ((p=malloc(strlen(s)+1)) !=NULL)
    strcpy(p, s);
  return(p);
}

struct hash *look(s)
     char *s;{ //смотрит на наличие дублей элемента в таблице                                                                                         
  struct hash *np;
  for (np = table[hash(s,0)]; np!=NULL; np = np->next)
    if (strcmp(s,np->key)==0)
      return(np);
  return(NULL);
}

struct  hash *install(key,name)
     char *key ,*name;{
   struct hash *np ,*look();
   int hashval,nk=0;
  if ((np =look(key))==NULL){
    np = (struct hash *) malloc(sizeof(*np));
    if (np==NULL)
      return(NULL);
    if ((np->name = strsave(key)== NULL)) //вот на это ругается
      return (NULL);
    hashval = hash(np->key,nk);
    np->next = table[hashval];
    table[hashval]=np;
    printf(">%d",hashval);
  }
  else{ free(np->key);
    nk++;
}
  return (np);
}
/*Ввод ключа*/
int enter(){
  printf("Введите ключ в виде хххАхх:");
  char *key,*name;
  scanf("%6s",&key);
  if (key ==NULL) main_menu();                          
if (install(key,name)==NULL)
    printf("\nне сохранил");
  printf("не ноль ");
  }

main() представляет из себя menu /основное изложено выше
При компиляции получаю предупреждение что :
hash_test.c: In function ‘install’:
hash_test.c:54:19: warning: assignment makes pointer from integer without a cast

А при выполнение .. позволюет ввести только 1 key ...
Заранее спасибо
rowlin вне форума Ответить с цитированием
Старый 07.05.2011, 07:20   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
if ((np->name = strsave(key)) == NULL)
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хеширование: Necare Помощь студентам 5 21.03.2011 19:46
Delphi. Хеширование. PianeR Фриланс 2 04.02.2011 00:09
Zobrist-хеширование Magnum2 Общие вопросы Delphi 0 05.12.2010 22:14
Хеширование в Делфи F@got Помощь студентам 3 09.04.2010 00:33
Хеширование RunForest Общие вопросы .NET 4 10.08.2009 15:21