Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alex510
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 13
#1

не получается создать линейный список - C++

05.11.2010, 18:23. Просмотров 380. Ответов 0
Метки нет (Все метки)

здравствуйте,собственно, возникла ошибка в функции заполнения нагруженного дерева.
Реализую дерево в виде списка с двумя связями,где один указатель llink указывает на самого левого сына узла,а rlink на правого брата узла

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
 
/*объявим класс */
class Dictionary{
  /*Создадим структуру для прeдставления элементов дерева */
  struct node{
    char symbol;  //буква
    node* llink;  //указатель на левого сына
    node* rlink; // указатель на правого брата
  };
public: node *root;
 
  /*функция создания нового элемента,передаем указатель на файл и указатель*/
  int create(FILE *f,node *t){
 
    char c;
    
    if  (EOF == fscanf(f,"%c",&c)){
      printf("Все слова считаны \n");
      return 0;
    }
    printf("считано %c\n",c);
    if (c !='.'){
      if(t==NULL){
        t = new node;
        t->symbol = c;
        t->rlink=NULL;
        printf("новый элемент %c\n",c);
        if (root==NULL) {printf("NULL\n");return 0;}
        create(f,t->llink);
      }
      if (t->symbol==c){
        printf("старый элемент %c\n",c);
        
        create(f,t->llink);
      }
      if (t->symbol != c){
        
        create(f,t->rlink);
      }
    }else{
      t = new node;
      t->symbol = c;
      t->llink=NULL;
      printf("конец слова");
      create(f,root);// когда конец слова начинаем проход по списку с начала
    }
  }
 int print_tree(node *t){
printf("функция запущена \n");
   if (t==NULL) {return 0;}
   printf("%c",t->symbol);
   if (t->llink !=NULL){
     print_tree(t->llink);}
   if (t->rlink != NULL){
     print_tree(t->rlink);}
   printf("exit\n");
   return 0;
  }
 
int main(){
  char b;
 
  FILE *in = fopen("input.txt", "r");
  /*Проверка существование потока */
  if ( in==NULL ){
    printf("Stream is NULL");
    return 0;
  }
  
  Dictionary tree;
  tree.root=NULL;
  tree.create(in,tree.root);
    if (tree.root==NULL) { printf("NULL\n");
    return 0;
  }
  tree.print_tree(tree.root);
  
  return 0;
}
Собственно вопрос,почему указатель root остается равным NULL? Ведь по идее, он должен указывать на второй элемент списка после выполнения функции create и не быть NULL?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2010, 18:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не получается создать линейный список (C++):

Линейный список не получается создать - C++
Подчёркивает PNode-&gt;num=i;, а почему - хз. Какой раз пытаюсь разобраться в данной теме, но не получается. Скажите что делаю не так. ...

Вставить в линейный список перед элементом с заданным значением другой линейный список - C++
Как можно вставить в линейный список перед элементом с заданным значением другой линейный список? Как один элемент вставлять, я знаю, а вот...

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке - C++
Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке.

Создать односвязный линейный список - C++
Доброго времени суток! Помогите пожалуйста с кодом программы: Нужно создать односвязный линейный список, считывание значений элементов...

Создать линейный односвязный и двухсвязный список - C++
Нужна помощь,задание: Создать линейный односвязный список.Из списка удалить элемент стоящий перед минимальным элементом, затем элементы...

Создать линейный односвязный (двухсвязный) список - C++
Помогите пожалуйста решить задачу: Создать линейный односвязный (двухсвязный) список. Из списка удалить последнюю пару соседних...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2010, 18:23
Привет! Вот еще темы с ответами:

Создать линейный двунаправленный список, упрорядоченный по убыванию - C++
Создать линейный двунаправленный список, упрорядоченный по убыванию.

Создать однопоточный линейный список и сортировать методом пузырька - C++
создать однопоточный линейный список и сортировать методом пузырька , желательно с пояснением

Создать односвязный линейный список, элементами которого являются случайные натуральные числа - C++
Создать односвязный линейный список, элементами которого являются случайные натуральные числа. Напечатать значения элементов, расположенных...

Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди - C++
Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru