Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Boogi43
4 / 4 / 2
Регистрация: 25.11.2011
Сообщений: 56
1

Проблема с реализацией списков с помощью цепочек динамических объектов.

30.11.2012, 14:42. Просмотров 317. Ответов 0
Метки нет (Все метки)

Здравствуйте, форумчане!
Проблема с реализацией списков с помощью цепочек динамических объектов. Вот написал программу, но она не работает, а именно, при вызове функции print выводит не данные из звеньев списка, а черти что, и выводит бесконечно.
Видимо у меня проблема больше в понимании этой темы. Если вам не сложно, то, пожалуйста, не могли бы вы мне еще на пальцах объяснить что делает ф-ция void *malloc (size_t size), а то видимо я как-то не так понял.
Вот сам код:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node *link; // указатель на звено
typedef int elemtype; // тип элемента списка
 
typedef struct Node {  //звено состоит из двух частей
        elemtype type;  // - элемент списка
        link next;      // - указатель на следующее звено
        } node;
        
typedef  link  list;  // список задается указателем на звено
 
 
 
 
void  list_delete( list * nd); // удалить список nd и все его элементы
void insert_( list * nd , int  a); // добавить элемент с заданным целым числом a в начало списка nd
void remove_( list * nd , int a ); //  удалить из списка nd все элементы, содержащие заданное целое число a
void print(list nd); // вывести значения, хранящиеся в элементах списка nd
 
 
 
int main()
   {
      int i, a;
      list lst;         // переменная типа список
      lst=(list)malloc(sizeof(node)); //создаем указатель
      
      
      
      printf("Vvedite nomer operacii\n   kotoruyu nado vipolnit i dannie dlya nee: \n");                            
      printf("     1)list_delete\n");
      printf("     2)insert     \n");
      printf("     3)remove     \n");
      printf("     4)print      \n");
      printf("     5)exit       \n"); 
      
      while (1) // бесконечный цикл. Выход из цикла = выход из программы = exit(0)
        {
            scanf("%d", &i ); 
      
            switch (i)   //выполняем выбранную пользователем операцию
              {
                  case 1:  list_delete( &lst ); break;
                  case 2:  scanf("%d", &a ); insert( &lst, a); break;
                  case 3:  scanf("%d", &a ); remove( &lst, a); break;
                  case 4:  print(lst); break;
                  case 5:  exit(0); break;  //выход из программы
                    default: break;
               }
         }
       return 0; // до этого места программа никогда не дойдет, но напишем return 0  
   };
 
 
void  list_delete(list * nd) ///удаляем весь список
   {
          list q;
          while (nd)     //пока не конец списка
             {         
                 q=nd;  //отдаем ссылку на текущее звено
                 nd = nd->next; //а сами переходим на следующее
                 free(q);  //удаляем пройденное звено
             }
   }         
              
 
void insert ( list * nd , int a)  //  вставляем число a  в начало списка
  {       
          list q=(list)malloc(sizeof(list));
            q->type=a;  // создаем отдельно звено со значением а
            q->next= *nd; // добавляем к этому звену остальную цепь
            *nd=q;   // объявляем получившуюся цепь основной
  };
  
void remove( list * nd , int a) // удаляет из списка все элементы, содержащие число a
   {
         link q, ls;    // 
         ls=(list)malloc(sizeof(list));
         ls=nd;
         
         
         while (ls)
           {
              if (ls->type == a)
                  {
                           q=ls; //отдаем ссылку q
                           ls->next=ls->next->next; // отсоединяем звено которое в q
                           free(q);  //чистим звено, переданное q
                  };
              ls=ls->next;  // идем дальше
           
           };  
                
   }
          
                           
void print(list nd) // вывести значения, хранящиеся в элементах списка nd
  {
        while (nd!=NULL)  //пока не дошли до конца цепочки
           {
                printf(" %d", nd->type); //выводим наше число
                nd=nd->next;   // переходим к следующему звену
           }        
  };
Видимо проблема в void insert ( list * nd , int a) (70 строка)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 14:42
Ответы с готовыми решениями:

Реализация списков с помощью цепочек динамических объектов
Здравствуйте, форумчане! Проблема с реализацией списков с помощью цепочек...

Сравнивание линейных динамических списков
Доброго времени суток. Имеется горизонтальный список, каждое звено которого...

Аргументы-указатели и динамическая матрица, проблема с реализацией функции
Здравствуйте, форумчане! У меня следующая проблема: в main определена...

Сложение двух динамических объектов: cannot add two pointers
Прегрузку оператора + для статических объектов написал Romb Romb::operator +...

Сортировка элементов с помощью динамических двухсвязанных списков
ХОТЕЛОСЬ БЫ УВИДЕТЬ КАК БУДЕТ ВЫГЛЯДЕТЬ ЗАДАЧА НЕ ЗНАЮ С ЧЕГО НАЧАТЬ ЗВУЧИТ ТАК...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 14:42

Реализовать движущийся графический объект с помощью статических и динамических объектов
Добрый день. Решаю задачу из методички и поставлена она следующим образом:...

Использование динамических объектов с использованием других динамических объектов
Есть 2 массива, один создаёт Combobox, второй - Memo. Они создаются в...

Разработать программу с реализацией динамических структур
Помогите разработать программу с реализацией динамических структур с...


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

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

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