Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
amfisat
Форумчанин
66 / 66 / 3
Регистрация: 16.06.2009
Сообщений: 229
08.04.2012, 10:11     Добавление элемента в конец односвязного списка - ошибка   #1
Всем привет!

Собственно, задача такая: написать функцию, добавляющую элемент в конец связного списка. Вроде всё правильно, компилируется, но ничего не выводится, только появляется окошко "Закрытие программы ... ".
Что не так?

Код 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
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
struct link                           
   {
   int data;                          
   link* next;                        
   };
////////////////////////////////////////////////////////////////
class linklist                        
   {
   private:
      link* first;                    
   public:
      linklist()                      
         { first = NULL; }            
      void additem(int d);            
      void display();                
   };
//--------------------------------------------------------------
void linklist::additem(int d)  //добавляю в конец списка        
   {
   link* newlink1  = new link;
   newlink1 = first;
   while (newlink1->next != NULL)
       newlink1 = newlink1->next;
   link* newlink = new link;
   newlink->data = d;                  
   newlink->next = NULL;               
   newlink1->next = newlink;
   }
//--------------------------------------------------------------
void linklist::display()            
   {
   link* current = first;             
   while( current != NULL )           
      {
      cout << current->data << endl;  
      current = current->next;        
      }
   }
////////////////////////////////////////////////////////////////
int main()
   {
   linklist li;       
 
   li.additem(25);    
   li.additem(36);
   li.additem(49);
   li.additem(64);
 
   li.display();      
   return 0;
   }
Всем откликнувшимся спасибо за помощь.
AdAgent
Объявления
08.04.2012, 10:11     Добавление элемента в конец односвязного списка - ошибка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 10:11     Добавление элемента в конец односвязного списка - ошибка
Посмотрите здесь:

C++ Списки. Функции добавление списка в конец и в середину другого списка.
C++ Добавление элемента в начало односвязного списка
C++ Добавление в конец двусвязного списка
C++ Удаления элемента из односвязного списка
C++ Не работает добавление в конец односвязного списка
C++ Добавить элемент в конец односвязного списка
C++ Добавление элемента в конец списка
C++ Удаление элемента односвязного списка
zss
Модератор
2634 / 2548 / 525
Регистрация: 18.12.2011
Сообщений: 6,380
08.04.2012, 11:58     Добавление элемента в конец односвязного списка - ошибка   #2
Перед return 0;
Надо вставить код, задерживающий закрытие программы.
Например,
Код C++
1
system("pause");
или сделать ввод символа
Код C++
1
char c;cin>>c;
amfisat
Форумчанин
66 / 66 / 3
Регистрация: 16.06.2009
Сообщений: 229
08.04.2012, 12:13  [ТС]     Добавление элемента в конец односвязного списка - ошибка   #3
Все равно не работает.
Миниатюры
Добавление элемента в конец односвязного списка - ошибка  
Kuzia domovenok
Форумчанин
1710 / 1565 / 60
Регистрация: 25.03.2012
Сообщений: 5,289
Записей в блоге: 1
08.04.2012, 12:18     Добавление элемента в конец односвязного списка - ошибка   #4
Вот это 100% потеря памяти
Код C++
1
2
link* newlink1  = new link;
   newlink1 = first;
А вот это да. поиск последнего элемента, и добавление после него в список нового, вроде правильно
Код C++
1
2
3
4
5
6
while (newlink1->next != NULL)
           newlink1 = newlink1->next;
link* newlink = new link;
   newlink->data = d;                  
   newlink->next = NULL;              
   newlink1->next = newlink;
И опять, нигде не видно деструкторов. О какой потери памяти я говорил? она у вас вся не освобождается.

И у меня вопрос к знающему: можно ли структуру struct link сделать полностью приватной с другом linklist или того, что link* first; является приватным уже достаточно?
silent_1991
Форумчанин
Эксперт C++
4799 / 2923 / 116
Регистрация: 11.11.2009
Сообщений: 6,940
08.04.2012, 17:05     Добавление элемента в конец односвязного списка - ошибка   #5
Kuzia domovenok, её можно (и нужно было бы) сделать просто приватной, linklist другом делать не надо (это же структура, все поля и так публичные). То, что link *first приватный, в принципе, достаточно с точки зрения защиты данных, но с точки зрения общего проектирования то, что структура, специфичная для данного класса и только для него, находится снаружи, мне лично не нравится
Yandex
Объявления
08.04.2012, 17:05     Добавление элемента в конец односвязного списка - ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 12:06. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика