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

Список - C++

Восстановить пароль Регистрация
 
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
07.03.2011, 13:09     Список #1
Подскажите пожалуйста, как сделать связанный список? Чтобы новый элемент добавлялся в очередь по принципу 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++ std::sort. Как сортировать список? (список указателей на объект)
Упорядочить список студентов по среднему баллу и вывести весь список C++
C++ 3 класса: список, стек(как список), очередь(как список)
list. 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     Список
Ответ Создать тему
Опции темы

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