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

Динамический список - C++

Восстановить пароль Регистрация
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
17.07.2013, 14:35     Динамический список #1
Вот есть класс..совсем не замысловатый!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//=============================================================================
//=============================================================================
class id_list
{
      //private:
      public:
      int id;
      id_list* next;
      friend class base_info;
      void addID(int add_id,id_list* const first);
      void deleteID (int del_id,id_list* const first);
      void showIDlist(id_list* const first); 
      id_list(int c_id);   
};
//=============================================================================
//=============================================================================
значит в нем хранится список доступных id для дальнейшего использовния

Не по теме:

в будущем это класс будет входить в другой (хотя это наверно не важно)


значит так что у нас есть
1)конструктор который задает ид при создании(добавлении доступных ид)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
id_list::id_list(int c_id)
{
                     id=c_id;
                     next=NULL;
}

2)шоу айди типо вывести весь список
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void id_list::showIDlist(id_list* const first)
{
     cout<<"====================================================================";
     cout<<"\nCurrent id list:";
     if(first->next)
     {
       id_list* tmp=first->next;
       cout<<"\nID:"<<tmp->id;
       while(tmp->next)
       {
                       tmp=tmp->next;
                       cout<<"\nID:"<<this->id;
       } 
      cout<<"\n List ended\n"; 
     }
     else
     cout<<"\nList empty\n";
     cout<<"====================================================================\n";
     system("pause");
}

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
//ГіГ¤Г*ëåГ*ГЁГҐ âûáðГ*Г*îãî ГЁГ¤ ГЁГ§ ëþáîãî ìåñòГ*
void id_list::deleteID (int del_id,id_list* const first)
{
     if(first->next)
     {
          id_list *tmp=first->next;
          id_list *tmp2=first;
          while(1)
          {
                  if(tmp->id==del_id)
                  {
                                     if(tmp->next)
                                     {
                                                  tmp2->next=tmp->next;
                                                  delete tmp;
                                     }
                                     else
                                     {
                                                  tmp2->next=NULL;
                                                  delete tmp;
                                     }
                  break;
                  }
                  else
                  {
                      tmp=tmp->next;
                      tmp2=tmp2->next;
                  }
          }
                                                  
     }
     else
     {
         cout<<"List is Empty nothing to delete here!";
     }
}

4)И добавление заданной айдишки в конец
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Adding ID to list
//adds necessary id to the end of the id list
//uses constructor for adding
void id_list::addID(int add_id,id_list* const first)
{
     id_list *tmp;
     if(first->next)
     {
      tmp=first->next;
      while(tmp->next)
      {
      tmp=tmp->next;
      }
      tmp->next=new id_list(add_id);
     }//if
     else
     {
      first->next=new id_list(add_id);
     }//else
}

и собственно "тест" всего этого из мэйна.. вывод работает правельно это я уже точно проверила, проверяя возможность добавлять сталкнулась с проблемой... сначала код "теста"
C++
1
2
3
4
 id_list* const first=new id_list(8);
    first->addID(98,first);
    first->addID(77,first);
    first->showIDlist(first);
немного не правильно выглядит но это в будущем не будет использоваться напрямую и все методы будут скрыты
в любом случае что ожидалось....
создается константный указатель на первый элемент который останется даже если лист пуст...так что первый объект листа как бы фиктивный...не несет смысловой нагрузки (пока) в будущем в нем будет храниться кол-во элементов в списке.я его создала с значением 8
затем создала еще 2 с значением 98 и 77, должно было выгледеть так :
ID: 98
ID: 77
List ended;
*фирст пропускается так как смысла ид не несет
что я получаю в итоге?
ID:98
ID:8
если я создам еще 2,3,4,5...10000 элементов у всех них будет значение 8 как у first изменяю его значение изменяется значение всех последущих созданных.Самое интересное странное что первый после first создается какраз с нужным значением...я подумала что мб это из-за того что я вызываю все через указатель first
(а как пока иначе?)пришла в голову гениальная идея сделать функции статичными оказалась не такой уж гениальной... что делать? почему мои идшки получают все значения из first?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 14:35     Динамический список
Посмотрите здесь:

Динамический список C++
Динамический список C++
динамический список C++
Динамический список C++
C++ Динамический список
динамический список C++
C++ Динамический список
C++ Динамический список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
17.07.2013, 15:20     Динамический список #2
showId() строка 13: cout<<"\nID:"<<tmp->id;
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
17.07.2013, 15:29  [ТС]     Динамический список #3
да уж я думала что ошибка или в конструкторе или при добавке ..все пересмотрела 100 раз каждую чтрочку... а в итоге вообще не там искала..хорошо хоть все методы запостила иначе не нашли бы ошибку!!!Спасибо вам огромное
Yandex
Объявления
17.07.2013, 15:29     Динамический список
Ответ Создать тему
Опции темы

Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru