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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Strings (Строки) http://www.cyberforum.ru/cpp-beginners/thread186707.html
Даны натуральные чила n, символы s1, ….sn. Удалить из данной последовательности все группы букв вида abcd. С++
C++ указатели вождь племени ABBA не знает, как считать. В обмен на одну из своих землях другого племени попросил его выбрать один из трех кучи золотых монет. Но вождь племени ABBA хочет, чтобы получить наибольшее количество золотых монет. Справка лидера, чтобы сделать правильный выбор! Примечание. Ваша программа должна использовать указатели и не должен использовать библиотеку <string>. Вход:Первая строка... http://www.cyberforum.ru/cpp-beginners/thread186706.html
C++ Обедающие философы
Здравствуйте участники форума я на форуме нашел программу про обедающих философов вот её исходники using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Philosopher { public class Philosopher_1
Указатели C++
Вам дан текст. Ваша задача написать функцию, которая должна найти самую длинную последовательность внутри цифры. Вход: Первая строка содержит одну линию, что является не более, чем 1000. Выход: Самая длинная последовательность чисел. Все номера положительные и целые числа Заметим, что выход должны быть представлены как в образце. № INPUT ...
C++ Указатели http://www.cyberforum.ru/cpp-beginners/thread186693.html
Напишите функцию, которая будет удалять все слова в данном тексте, что соответствует более чем один раз. Примечание. Программы должны использовать указатель. Вход: Первая строка содержит одну линию, что является не более 1000 знаков с пробелами. Каждое слово не длиннее 30 символов. Выход: Форматированный текст. № INPUT OUTPUT 1 Buffalo...
C++ указатели Напишите функцию, которая должен найти и вернуть последние слова в данном тексте. Прототип функции должны быть следующие MostRecent недействительными (символ * Текст, слова символ *) В символ слова * Ваш функции должны вернуться последние слова, что occurce в тексте. Ваша программа должна быть не чувствительны к регистру (игнорировать регистр - "может" и "может" те же слова) Вход: Первая... подробнее

Показать сообщение отдельно
alex510
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 13

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

05.11.2010, 18:23. Просмотров 376. Ответов 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?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru