2014-04-11 5 views
0

Моя задача - удалить узел из массива указателей, которые указывают на структуру.Хеширование, связанный список, удаление узла

Мой код не работает, и я просто не знаю, почему:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "Jmena4.h" 

#define LENGTH 101 
#define P 127 
#define Q 31 

typedef struct node { 
char *name; 
struct uzel *next; 
} NODE; 

int hash(const char Name[]) { 

int i; 
int n = strlen(Name); 
int result; 
result = Name[0] * P + Name[1] * Q + Name[n - 1] + n; 
return result % LENGTH; 
} 

void Insert(NODE *array[], const char *name) { 

NODE *u; 
int h; 
u = (NODE*)malloc(sizeof(NODE)); 
u->name = name; 
h = hash(name); 

u->next = array[h]; 
array[h] = u; 

} 

int Search(NODE *array[], const char *name) { 

NODE *u; 
u = array[hash(name)]; 

while (u != NULL) { 
    if (strcmp(u->name, name) == 0) { 
     printf("%s\n", u->name); 
     return 1; 
    } 
    u = u->next; 
} 
printf("Name: %s wasn't found\n", name); 
return 0; 

} 

int Delete(NODE *array[], const char *name) { 

NODE *current; 
NODE *previous; 
int position = hash(name); 

current = array[position]; 
previous = NULL; 

while (current != NULL) { 
    if (strcmp(current->name, name) == 0) { 
     if (previous == NULL) { 
      array[position] = current->next; 
      return 1; 
     } 
     else { 
      previous->next = current->next; 
      current = NULL; 
      return 1; 
     } 
    } 
    previous = current; 
    current = current->next; 
} 
return 0; 

} 



int main() 
{ 
int i; 


NODE *array[LENGTH]; 

for (i = 0; i < LENGTH; i++) { 
    array[i] = NULL; 
} 


for (i = 0; i < Pocet; i++) { 
    Insert(array, Jmena[i]); 
} 


for (i = 0; i < PocetZ; i++) { 
    Delete(array, JmenaZ[i]); 
} 

Search(array, "Julie"); 


system("PAUSE"); 
return 0; 
} 

EDIT 1: Я изменил имена переменных и вместо position = array[position] должны быть current = array[position], но она по-прежнему не работает.

EDIT 2: В массиве Jmena является строкой «Julie», и я могу выполнить поиск после функции Insert, но после удаления строк из JmenaZ, которые не включены в программу «Julie», это: Имя: Julie не найден.

+3

Добавьте тег языка, пожалуйста. Кроме того, объясните наш код еще раз. Что значит, что ваш код не работает? Дайте нам образец ввода и вывода. –

+0

Что делать, если вы попытались выполнить поиск после КАЖДОГО удаления (в отличие от всех). будет ли он работать после любого из них? –

ответ

2

С одной стороны, current не инициализирован, прежде чем он будет проверен в цикле while.

+0

Я думаю, он имел в виду 'current = array [position]' – GoldRoger

Смежные вопросы