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

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

Войти
Регистрация
Восстановить пароль
 
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
#1

Список - C++

07.03.2011, 13:09. Просмотров 344. Ответов 5
Метки нет (Все метки)

Подскажите пожалуйста, как сделать связанный список? Чтобы новый элемент добавлялся в очередь по принципу LIFO. Или хотябы натолкните на мысль.
Вот есть по принципу FIFO:
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
// список
#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
  first = newlink;               // first теперь указывает на новый элемент
}
///////////////////////////////////////////////////////////
void linklist::display ( )
{
  link* current = first;           // начинаем с первого элемента
  while( current )                 // пока есть данные
  {
    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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2011, 13:09     Список
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
07.03.2011, 13:40     Список #2
C++
1
2
3
4
5
6
void linklist::additem ( int d ) // добавление элемента
{
link* newlink = new link;     
newlink->data = d;             
first->next = newlink;        
}
не проверял, но идея думаю такая должна быть
IrineK
Заблокирован
07.03.2011, 13:42     Список #3
В вашей проге процедура void linklist::display ( ) выводит именно по принципу LIFO (last in first out), т.е.: 64,49,36,25
По идее, в проге под FIFO должно выводиться: 25,36,49,64.
Похоже, что задача уже решена?

P.S. В девятой строке
C++
1
};
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
07.03.2011, 13:58  [ТС]     Список #4
C++
1
2
3
4
5
6
void linklist::additem ( int d ) // добавление элемента
{
link* newlink = new link;     
newlink->data = d;             
first->next = newlink;        
}
вроде немного неправильно, потому что здесь first->next = newlink; обращение к данным ещё не инициализированного обьекта
Похоже, что задача уже решена?
как это понять? Правильно, должно выводится 25,36,49,64
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
07.03.2011, 14:07     Список #5
предыдущая идея ен прокатила, так что вот
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
55
56
57
58
59
#include "stdafx.h"
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
struct link   // один элемент списка
{
  int data;   // некоторые данные
  link* next; // указатель на следующую структуру
};
///////////////////////////////////////////////////////////
class linklist // список
{
  private:
    link* first;
  public:
    linklist ( )            // конструктор без параметров
      { first = new link;
        first->next = NULL;}     // первого элемента пока нет
    void additem ( int d ); // добавление элемента
    void display ( );       // показ данных
};
///////////////////////////////////////////////////////////
void linklist::additem ( int d ) // добавление элемента
{
  link* newlink = new link;      // выделяем память
  newlink->next = NULL;
  link* current = first;    
  while(current->next)                 // пока есть данные
  {
    current = current->next;       // двигаемся к следующему элементу
  }
    current->data = d;
    current->next = newlink;
  
}
///////////////////////////////////////////////////////////
void linklist::display ( )
{
  link* current = first;           // начинаем с первого элемента
  while( current->next)                 // пока есть данные
  {
    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;
}
ЗЫ вы привели пример по принципу LIFO, а не FIFO)
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
07.03.2011, 14:17  [ТС]     Список #6
постоянно путаю их .
Даже перед тем как написать, специально посмотрел определение этих понятий, но перепутал
обычно редко такие ошибки допускаю
Yandex
Объявления
07.03.2011, 14:17     Список
Ответ Создать тему
Опции темы

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