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

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

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

Односвязный список - C++

30.04.2013, 03:51. Просмотров 1112. Ответов 10
Метки нет (Все метки)

Есть связной список. У класса есть метод добавления элементов(additem()). Надо исправить метод, чтобы он добавлял элемент не в начало, а в конец списка. Т.е. если я введу числа к примеру 11,22,33 то программа должна в таком же порядке вывести их, а не 33,22,11. Не могу понять как реализовать. Подскажите пожалуйста.

Вот на всякий случай код:
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
#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* newlink = new link;        
   newlink->data = d;                 
   newlink->next = first;            
   first = 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;
   }
Добавлено через 1 час 59 минут
Вот моя неудачная попытка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void idditems(int b)
{
    link* newlink = new link;
        newlink->data = b;
        (*newlink).next = NULL;
       link* spare = first;
 
        while(spare != NULL) 
            spare = spare->next;
 
        spare = newlink;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 03:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Односвязный список (C++):

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

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов - C++
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов. Помогите пожалуйста,...

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

Односвязный список - C++
Здравствуйте уважаемые форумчане. Помогите пожалуйста с задачкой: В памяти хранится односвязный список. Вам дан указатель на первый...

Односвязный список - C++
Доброй ночи! Вроде все написала правильно, прога должна читать из файла KR8+.txt и записывать один элемент в KR8.txt в конец списка... но...

Односвязный список - C++
Задание: Сформировать список вещественных чисел и вычислить сумму. На 32 строке где значения, выдает ошибку. Почему? Сумму этих...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13228 / 7500 / 845
Регистрация: 27.09.2012
Сообщений: 18,419
Записей в блоге: 3
Завершенные тесты: 1
30.04.2013, 10:10 #2
попробуйте такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void linklist::additem(int d)       
   {
        link* newlink = new link;        
        newlink->data = d;
        if(first){
            link * temp=first;
            for(;temp->next;temp=temp->next);
            newlink->next = NULL;            
            temp->next = newlink;                   
        }else{
            first=newlink;
            first->next=NULL;
        }
    }
1
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
30.04.2013, 14:29  [ТС] #3
Спасибо, работает.

Добавлено через 9 минут
Croessmah, скажите пожалуйста, у Вас в коде стоит точка с запятой после объявления цикла. Точка с запятой, означает примерное такое "цикл без тела, выполнять только условие" ?
0
Croessmah
Эксперт CЭксперт С++
13228 / 7500 / 845
Регистрация: 27.09.2012
Сообщений: 18,419
Записей в блоге: 3
Завершенные тесты: 1
30.04.2013, 18:31 #4
Цитата Сообщение от IvanInanovich Посмотреть сообщение
Точка с запятой, означает примерное такое "цикл без тела, выполнять только условие" ?
Да, цикл с пустым телом
1
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 22:34 #5
IvanInanovich, или такой вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void linklist::additem(int d)       
{
    link *newlink = new link;        
    newlink -> data = d;
 
    if(first){
        link *temp = first;
        while(temp -> next != NULL)
            temp = temp -> next;
                
            temp -> next = newlink;
            newlink -> next = NULL;                   
        }else{
            first=newlink;
            first->next=NULL;
        }
}
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
30.04.2013, 23:21 #6
yoghurt92, с 11-й строки начинается бред. Работать не будет.
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 23:49 #7
lazybiz, и почему же? 11 - temp теперь последний и указывает на новый (который теперь последний).
12 - NULL говорит что новый последний. 14 и 15 для пустого списка.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.05.2013, 00:03 #8
Всё правильно, но тебе бы стоило научится выравнивать код по фигурным скобкам (телу цикла/условия).
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 00:10 #9
lazybiz, да это же не мой код, я просто показал что можно через while а не через for как предложил Croessmah, вот и все
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.05.2013, 00:19 #10
yoghurt92, а если бы он был в одну строчку написан без пробелов, ты бы тоже его просто скопировал и вставил?)
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 00:33 #11
lazybiz, ну вы уже придираетесь
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 00:33
Привет! Вот еще темы с ответами:

Односвязный список - C++
Здравствуйте! Кто может разъяснить как вставить в узел заданного места значение.. 1. Нужно выделить память Elem *Ins = new Elem ...

Односвязный список - C++
Дан список целых чисел , удалить все положительные. struct my_list{ int num; struct my_list*Next; } int x; my_list...

Односвязный список - C++
Люди помогите пожалуйста с лабораторной сделал прогу по заданию а преподаватель говорит что не правильно сделана функция поиска и вообще...

Односвязный список - C++
Всем привет, Дaн oднocвязный cпиcoк, элeмeнт этoгo cпиcка coдержит маccив из 10 цeлых пeрeмeнных. Эти пeрeмeнные нужнo xранит в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.05.2013, 00:33
Ответ Создать тему
Опции темы

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