2014-04-11 1 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; 
} 

편집 1 : 나는 current = array[position]을해야한다 변수의 이름을 변경하고 대신 position = array[position]의,하지만 여전히 작동하지 않습니다.

EDIT 2 : 배열에서 Jmena는 "Julie"문자열이고 Insert 함수 후 검색 할 수 있지만 "Julie"프로그램 출력이 포함되지 않은 JmenaZ에서 문자열을 삭제 한 후 이름 : Julie was not found.

+3

언어 태그를 추가하십시오. 또한, 우리의 코드를 좀 더 설명해주십시오. 코드가 작동하지 않는다는 것은 무엇을 의미합니까? 샘플 입력 및 출력을 제공하십시오. –

+0

각 삭제 후에 검색을 시도하면 어떻게됩니까? 그들 중 어느 누구도 따라 올 것인가? –

답변

2

currentwhile 루프에서 테스트하기 전에 초기화되지 않았습니다.

+0

나는 그가'current = array [position]'을 의미한다고 생각한다. – GoldRoger