Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум C++ > Форум С++ для начинающих
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 08.04.2012, 09:11   #1
amfisat
Форумчанин
 
Аватар для amfisat
 
Регистрация: 16.06.2009
Сообщений: 229
Репутация: 64 (64)
Лучшие ответы: 3
Добавление элемента в конец односвязного списка - ошибка / С++ для начинающих

Всем привет!

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

Код 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;
   }
Всем откликнувшимся спасибо за помощь.
Старый 08.04.2012, 10:58   #2
zss
Модератор
 
Регистрация: 18.12.2011
Сообщений: 3,351
Репутация: 1457 (1457)
Лучшие ответы: 170
Добавление элемента в конец односвязного списка - ошибка

Перед return 0;
Надо вставить код, задерживающий закрытие программы.
Например,
Код C++
1
system("pause");
или сделать ввод символа
Код C++
1
char c;cin>>c;
Другие темы раздела Форум начинающих программистов C++. Вопросы начинающих программистов по С++. Помощь студентам и школьникам в решении задач.
C++ Дописать программу, на тему "строковые типы данных".
Само задание звучит так: Дан текст, состоящий не менее чем из пяти слов. Сформировать строку, в которую попадут только те слова, где одинаковые буквы встречаются более двух раз. Например, молоко. Смог только разбить строку по словам, и каждое слова в массив. Осталось только реализовать подсчёт...
C++ Составить программу вычисления функции..
Составить программу вычисления функции f(t)=t^2+2,5t/t+1, аргументы вводятся с клавиатуры. (Используя при этом заголовок функции, начало функции, тело функции)
Старый 08.04.2012, 11:13  [ТС]   #3
amfisat
Форумчанин
 
Аватар для amfisat
 
Регистрация: 16.06.2009
Сообщений: 229
Репутация: 64 (64)
Лучшие ответы: 3
Добавление элемента в конец односвязного списка - ошибка

Все равно не работает.
Миниатюры
Добавление элемента в конец односвязного списка - ошибка  
Старый 08.04.2012, 11:18   #4
Kuzia domovenok
Форумчанин
 
Аватар для Kuzia domovenok
 
Регистрация: 25.03.2012
Сообщений: 4,416
Репутация: 1509 (1363)
Записей в блоге: 1
Лучшие ответы: 27
Добавление элемента в конец односвязного списка - ошибка

Вот это 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; является приватным уже достаточно?
Старый 08.04.2012, 16:05   #5
silent_1991
Форумчанин
Эксперт C++
 
Регистрация: 11.11.2009
Сообщений: 6,923
Репутация: 4766 (2890)
Лучшие ответы: 115
Добавление элемента в конец односвязного списка - ошибка / С++ для начинающих

Kuzia domovenok, её можно (и нужно было бы) сделать просто приватной, linklist другом делать не надо (это же структура, все поля и так публичные). То, что link *first приватный, в принципе, достаточно с точки зрения защиты данных, но с точки зрения общего проектирования то, что структура, специфичная для данного класса и только для него, находится снаружи, мне лично не нравится
Старый 08.04.2012, 16:05
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
С++ для начинающих Удаление элемента из односвязного списка
Здравствуйте. Даны функции для работы с односвязным списком. Так вот в функции list_delete ошибка. Последний добавленный элемент не удаляется. Само добавление производится в начало связного списка. Вроде всё просто и элемент должен удаляться, но нет. #include <stdio.h> #include <stdlib.h>...
Kamuro
С++ для начинающих Добавление элемента в начало односвязного списка
Здравствуйте, я не где не могу найти функцию по добавлению элемента в начало односвязного списка. Пожалуйста подскажите ее.
Exxplozer
Delphi Добавление элемента в конец списка
type ТЭ=...(тип элемента списка) список=^звено; звено:record элем:ТЭ; след:список; end; Описать и проверить процедуру которая вставляет в конец списка L новый элемент X
pilot
C для начинающих Удаление элемента из односвязного списка
Почему не работает функция удаления идентификатора? Как ее можно переделать? #include"stdafx.h" #include "conio.h" #include "stdio.h" #include "stdlib.h" #include "string.h" void print(struct spisok *p); struct spisok
Manula93
Опции темы

Текущее время: 13:13. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.