Реализация двоичного дерева поиска - C (СИ)
Формулировка задачи:
Вот, собственно, код:
При использовании возникает ошибка сегментации. В чем может быть дело?
#ifndef DICTIONARY_H_INCLUDED #define DICTIONARY_H_INCLUDED #include <string.h> typedef struct dictionary_t { struct dictionary_t* m_pLeft; struct dictionary_t* m_pRight; char m_key[10]; char m_value[10]; } dictionary_t; dictionary_t* dictionary_ctor(dictionary_t* left, dictionary_t* right, char* key, char* value) { dictionary_t* dic = (dictionary_t*)malloc(sizeof(dictionary_t)); dic->m_pRight = left; dic->m_pLeft = right; //dic->m_key = key; //dic->m_value = value; strncpy(dic->m_key, key, 10); strncpy(dic->m_value, value, 10); return dic; } void dictionary_insert(dictionary_t* dic, char* key, char* value) { if (dic == NULL) { dic = dictionary_ctor(NULL, NULL, key, value); printf("Added key:%s value:%s\n", key, value); return; } if (strcmp(key, dic->m_key) > 0) { dictionary_insert(dic->m_pRight, key, value); return; } if (strcmp(key, dic->m_key) < 0) { dictionary_insert(dic->m_pLeft, key, value); return; } // if key == dic->m_key //*dic->m_value = *value; strncpy(dic->m_value, value, 10); } char* dictionary_find(dictionary_t* dic, char* key) { char* answer = NULL; if (dic == NULL) { return NULL; } if (*key == *dic->m_key) { return dic->m_value; } if (strcmp(key, dic->m_key) > 0) { answer = dictionary_find(dic->m_pRight, key); } if (strcmp(key, dic->m_key) < 0) { answer = dictionary_find(dic->m_pLeft, key); } return answer; } #endif // DICTIONATY_H_INCLUDED
Решение задачи: «Реализация двоичного дерева поиска»
textual
Листинг программы
#ifndef DICTIONARY_H_INCLUDED #define DICTIONARY_H_INCLUDED #include <string.h> typedef struct dictionary_t { struct dictionary_t* m_pLeft; struct dictionary_t* m_pRight; char* m_key; char* m_value; } dictionary_t; dictionary_t* dictionary_ctor(dictionary_t* left, dictionary_t* right, char* key, char* value) { dictionary_t* dic = (dictionary_t*)malloc(sizeof(dictionary_t)); dic->m_pRight = left; dic->m_pLeft = right; dic->m_key = key; dic->m_value = value; return dic; } void dictionary_insert(dictionary_t** dic, char* key, char* value) { if (*dic == NULL) { *dic = dictionary_ctor(NULL, NULL, key, value); return; } if (strcmp(key, (*dic)->m_key) > 0) { dictionary_insert(&(*dic)->m_pRight, key, value); return; } if (strcmp(key, (*dic)->m_key) < 0) { dictionary_insert(&(*dic)->m_pLeft, key, value); return; } (*dic)->m_value = value; } char* dictionary_find(dictionary_t* dic, char* key) { char* answer = NULL; if (dic == NULL) { return NULL; } if (*key == *dic->m_key) { return dic->m_value; } if (strcmp(key, dic->m_key) > 0) { answer = dictionary_find(dic->m_pRight, key); } if (strcmp(key, dic->m_key) < 0) { answer = dictionary_find(dic->m_pLeft, key); } return answer; } #endif // DICTIONATY_H_INCLUDED
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д