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

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

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

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

30.04.2013, 03:51. Просмотров 1100. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 03:51     Односвязный список
Посмотрите здесь:

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

Односвязный Список - C++
Как реализовать список в этом коде, необязательно писать код буду благодарен за совет или подсказку! #include &quot;stdafx.h&quot; #include...

Односвязный список - C++
Написал программу, которая сортирует массив по неубыванию и добавляет в него элемент, не нарушая упорядоченности. Как переделать ее под...

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

Односвязный список - C++
как в односвязном списке сделать проверку на одинаковые элементы? и если они есть, удалить один из них.

Односвязный список - C++
Дано два списка с целыми числами. Создать новый список в котором размещены элементы какие одновременно присутствуют в первых двух списках. ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 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;
        }
    }
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
30.04.2013, 14:29  [ТС]     Односвязный список #3
Спасибо, работает.

Добавлено через 9 минут
Croessmah, скажите пожалуйста, у Вас в коде стоит точка с запятой после объявления цикла. Точка с запятой, означает примерное такое "цикл без тела, выполнять только условие" ?
Croessmah
Модератор
Эксперт CЭксперт С++
13053 / 7316 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
30.04.2013, 18:31     Односвязный список #4
Цитата Сообщение от IvanInanovich Посмотреть сообщение
Точка с запятой, означает примерное такое "цикл без тела, выполнять только условие" ?
Да, цикл с пустым телом
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;
        }
}
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
30.04.2013, 23:21     Односвязный список #6
yoghurt92, с 11-й строки начинается бред. Работать не будет.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 23:49     Односвязный список #7
lazybiz, и почему же? 11 - temp теперь последний и указывает на новый (который теперь последний).
12 - NULL говорит что новый последний. 14 и 15 для пустого списка.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
01.05.2013, 00:03     Односвязный список #8
Всё правильно, но тебе бы стоило научится выравнивать код по фигурным скобкам (телу цикла/условия).
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 00:10     Односвязный список #9
lazybiz, да это же не мой код, я просто показал что можно через while а не через for как предложил Croessmah, вот и все
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
01.05.2013, 00:19     Односвязный список #10
yoghurt92, а если бы он был в одну строчку написан без пробелов, ты бы тоже его просто скопировал и вставил?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 00:33     Односвязный список
Еще ссылки по теме:

Односвязный список - C++
Доброго времени суток. Помогите, пожалуйста, решить задачу: Реализовать односвязный список, с возможностью его разворота в обратную...

Односвязный список - C++
Начал читать про односвязные списки и никак не пойму, зачем мы выделяем память под первый элемент списка? Мы сначала определяем указатель...

Односвязный список - C++
Всем привет. Помогите разобраться с односвязным списком. Вот собственно и вопросы: 1) Если я правильно понял то список это чтото вроде...

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

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


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

Или воспользуйтесь поиском по форуму:
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 00:33     Односвязный список #11
lazybiz, ну вы уже придираетесь
Yandex
Объявления
01.05.2013, 00:33     Односвязный список
Ответ Создать тему
Опции темы

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