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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2015, 17:58   #1
ZimOne
 
Регистрация: 01.12.2013
Сообщений: 5
По умолчанию Сортировка слов двоичным деревом

Пишу программу для сортировки списка слов в алфавитном порядке через двоичное дерево. Сначала написал аналогичную программу для сортировки последовательности целых чисел по возрастанию, все работает. Попытался переделать под строки, не работает, не могу найти ошибку, программа ничего не печатает.
Код прокомментирован, так же напротив некоторых строк есть в комментарии строка, которая была на этом месте для сортировки чисел. Заранее спасибо за помощь.



Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef char item_type; /* typedef int item_type */
 
typedef struct tree {
    item_type item; /*Элемент данных*/
    struct tree *parent; /*Указатель на родительский узел*/
    struct tree *left; /*Указатель на левый дочерний узел*/
    struct tree *right; /*Указатель на правый дочерний узел*/
}tree;
 
/*Функция печати дерева, получает на вход указатель на дерево*/
void print_tree (tree *l);
 
/*Функция вставки узла x в дерево l, с родительским узлом parent, содержащим l*/
void insert_tree (tree **l, item_type x, tree *parent);
 
/*Функция инициализации дерева*/
tree *init_tree (void);
 
/*Функция поиска минимального элемента в дереве l*/
tree *find_minimum (tree *l);
 
/*Функция определения числа пробелов в строке str*/
int spaceNumber (char str[256]);
 
int main(void)
{
    FILE *fin; char str[256]; int num, i;
    tree *l; char filename[256];
    l = init_tree();
    scanf("%s", &filename); /* scanf("%d", &filename); */
    fin = fopen(filename, "r"); /*Открываем файл, из которого считываем слова (ранее числа)*/
    num = spaceNumber(str) - 1;
    for (i = 0; i < num; ++i)                   /* while (fscanf(fin, "%d", &x) == 1) insert_tree(&l, x, NULL); */
        while (fscanf(fin, "%s", &str) == 1) 
            insert_tree(&l, str, NULL);
    print_tree(l);
    return 0;   
}
 
/*Функция печати дерева, получает на вход указатель на дерево*/
void print_tree (tree *l)
{
    if (l != NULL) {
        print_tree (l -> left);
            printf ("%s ", l -> item); /* printf ("%d", l->item}; */
        print_tree (l -> right);
    }
}
 
/*Функция вставки узла x в дерево l, с родительским узлом parent, содержащим l*/
void insert_tree (tree **l, item_type x, tree *parent)
{
    tree *p;
    if (*l == NULL) {
        p = malloc (sizeof (tree));
        p->item = x;
        p->left = p->right = NULL;
        p->parent = parent;
        *l = p;
        return;
    }
    if (x < (*l)->item)
        insert_tree (&((*l)->left), x, *l);
    else
        insert_tree (&((*l)->right), x, *l);
    
}
 
/*Функция инициализации дерева*/
tree *init_tree (void)
{
    return (NULL);
}
 
/*Функция поиска минимального элемента в дереве l*/
tree *find_minimum (tree *l)
{
    tree *min;
    if (l == NULL) return NULL;
    min = l;
    while (min->left != NULL)
        min = min->left;
    return min;
}
 
/*Функция определения числа пробелов в строке str*/
int spaceNumber (char str[256])
{
    int i, s = 0, l = strlen(str);
    for (i = 0; i < l; ++i)
        if (str[i] == ' ')
            s++;
    return s;
}
ZimOne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка с двоичным включением. Sheva95 Помощь студентам 0 20.10.2013 20:45
сортировка слов CppForYou Общие вопросы C/C++ 3 12.06.2013 11:43
сортировка слов... CppForYou Общие вопросы C/C++ 2 01.05.2013 01:56
Сортировка деревом parkito Общие вопросы C/C++ 2 21.12.2011 07:36
Сортировка двоичным деревом Anubys Помощь студентам 0 09.04.2011 08:33