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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Em1ly
 Аватар для Em1ly
5 / 5 / 0
Регистрация: 21.05.2010
Сообщений: 153
09.09.2010, 20:07     Динамический список #1
Помогите решить задачу.
Вчера обращалась, знаю, стыдно. ._.
В общем, другая задачка и большая просьба написать её на этом уровне:
ссылка удалена
[тут вы сможете понять, на каком я уровне. и на каком уровне должна быть написана программа]
Слёзно прошу! Т_Т
Само задание, в общем-то...

Сформировать динамический список (стек или очередь), считая, что длина списка (количество элементов) задана. В составе программы описать функцию, которая находит наибольший элемент списка и его порядковый номер.
 Комментарий модератора 
Выкладывайте код на форум. Ссылки на файлообменники запрещены правилами.


Добавлено через 28 минут
окей. выкладываю кодом
свой уровень:

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
#include <iostream>
using namespace std;
 
void main()
{   struct node {   int info;
        struct node *next;
       };
    typedef node *NodePtr;  // указатель на тип node
    NodePtr head = NULL;
    NodePtr p;          // указатель на текущий элемент
    NodePtr tail;           // указатель на "хвост" очереди
    int N = 10;         // количество элементов в очереди
    int cnt = 1;            // счетчик элементов в очереди
 
    if (head == NULL)
    {   head = new node;
    head->info = cnt++; // или какому-то другому значению
    head->next = NULL;
    tail = head;
    }
    for (int i = 2; i<=N; i++)
    { p = new node;
    p->info = cnt++;
    tail->next = p;     // в данном случае - NULL
    p->next = NULL;
    tail = p;
    }
// Вывод очереди на экран
p = head;
for (i = 1; i<=N; i++)
    {   cout << p->info << ' ';
    p = p->next;
    }
cout <<endl;
}
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
#include <iostream>
using namespace std;
#include <stdlib.h>
 
void main()
{   int N;          // количество элементов в списке
    int target;         // искомое значение
    int count;              // местоположение искомого элемента
    struct node {   int dat;        // информационное поле
    struct node *link;  // поле-указатель
    };
    typedef node *NodePtr;      //указатель на тип Node
    NodePtr head = NULL;
    NodePtr here;       // указатель на текущий элемент
    randomize();
    cout << "Введите количество элементов в списке  ";
    cin >> N;
    for (int i = 0; i<N; i++)   // формируем стек
    {   if (head == NULL)
    {   head = new node;
    if (head == NULL)
    { cout << "Недостаточно памяти !" << endl;
              exit(1);   }
    head->dat = random(100) - 50;
    cout << head->dat << ' ';
    head->link = NULL;
    }
    else    {   here = new node;
    if (here == NULL)
            {   cout << "Недостаточно памяти !" << endl;
                 exit(2);
             }
    here->dat = random(100) - 50;
    cout << here->dat << ' ';
    here->link = head;
    head = here;
    }
    }
    cout <<endl;
    cout << "Чему равно искомое значение? ";
    cin >> target;
    here = head;  count = 1;        // встали в начало списка
    if (here == NULL)
    cout << "Список пуст!" << endl;
    else { while (here->dat != target && here->link != NULL)
    { here = here->link;
    count++;
    }
    if (here->dat == target)
    cout << "Искомый элемент имеет № " << count << endl;
    else   cout << "Элемент не найден!" << endl;
    }
}

[если честно, я не понимаю, как это выкладывать кодом]

Добавлено через 6 часов 38 минут
помогииите тт
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2010, 20:07     Динамический список
Посмотрите здесь:

Динамический список C++
Динамический список C++
C++ Динамический список
Динамический список C++
C++ Динамический список
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
12.09.2010, 01:30     Динамический список #2
Уважаемая Татьяна!
Будьте добры воспользоваться уже готовыми решениями поиска макс. элемента, например здесь.
Кроме того, по условиям задачи вам не нужно создавать свой тип списка, а всего лишь сформировать оный. Итого, std::vector/deque вам в помощь.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.09.2010, 11:09     Динамический список #3
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Кроме того, по условиям задачи вам не нужно создавать свой тип списка, а всего лишь сформировать оный.
Сдаётся мне - это всё-таки задание на конструирование велосипедов. Судя по представленному коду там и намёка на стандартные контейнеры нет...

Цитата Сообщение от Em1ly Посмотреть сообщение
если честно, я не понимаю, как это выкладывать кодом
Ну вот как два листинга выложили, так и нужно...
Вот Вам Ваш список
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <stdexcept>
 
class List {
    // структура элемента списка
    struct Node {
        int nValue;
        Node * pNext;
        Node(int val) : nValue(val), pNext(NULL) {}
    };
    Node * first, * last; // указатели на первый и последний элементы
    List(const List&); // закрытый конструктор копирования - не нужно нам один список в другой копировать
public:
    // конструктор по умолчанию
    List() : first(NULL), last(NULL) {}
    // деструктор
    ~List() {
        while ( first ){
            last = first->pNext;
            delete first;
            first = last;
        }
    }
    // возвращает true если список пустой
    bool empty() const {
        return first == NULL;
    }
    // добавление элемента в список
    void add(int val){
        Node * pNode = new Node(val);
        // если список пустой, вставить первый элемент
        if ( ! first ){
            first = pNode;
            last = first;
        }
        // иначе добавить элемент в конец списка
        else {
            last->pNext = pNode;
            last = pNode;
        }
    }
    // максимальное значение в списке
    int maxValue() const {
        int maxVal;
        Node * pNode;
        
        // если список пустой, выйти с сообщением об ошибке
        if ( empty() )
            throw std::runtime_error("Empty list!");
        
        maxVal = first->nValue;
        for ( pNode = first->pNext; pNode != NULL; pNode = pNode->pNext )
            if ( maxVal < pNode->nValue )
                maxVal = pNode->nValue;
        
        return maxVal;
    }
    // поиск элемента с заданным значением. возвращает позицию элемента в списке
    // начиная с 1, или 0, если элемент с заданным значением не найден
    int findElement(int val) const {
        int currentPos, foundPos;
        Node * pNode;
        
        // если список пустой, выйти с сообщением об ошибке
        if ( empty() )
            throw std::runtime_error("Empty list!");
        
        foundPos = 0;
        for ( currentPos = 1, pNode = first; pNode != NULL; ++currentPos, pNode = pNode->pNext ){
            if ( pNode->nValue == val ){
                foundPos = currentPos;
                break;
            }
        }
        return foundPos;
    }
};
 
int main(){
    int val, cnt;
    List list;
    
    std::cout << "Number of elements in list: ";
    std::cin >> cnt;
    for ( int i = 0; i < cnt; ++i ){
        std::cout << "Element #" << ( i + 1 ) << ": ";
        std::cin >> val;
        list.add(val);
    }
    
    if ( list.empty() ){
        std::cerr << "Error! No elements in list!" << std::endl;
        return 1;
    }
    
    val = list.maxValue();
    std::cout << "Max value in list is " << val << std::endl;
    std::cout << "it's " << list.findElement(val) << "(th) from begin." << std::endl;
    
    return 0;
}
старался попроще сделать, если что - спрашивайте...
Em1ly
 Аватар для Em1ly
5 / 5 / 0
Регистрация: 21.05.2010
Сообщений: 153
12.09.2010, 17:07  [ТС]     Динамический список #4
easybudda, ох спасииибо
вопросов то собственно всё также много ._.
если бы нам более менее понятно объяснили эту тему >.>
а вот команды типа этих:

Цитата Сообщение от easybudda Посмотреть сообщение
std::cout
Цитата Сообщение от easybudda Посмотреть сообщение
std::cin
Цитата Сообщение от easybudda Посмотреть сообщение
std::cerr
меня вообще пугают
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.09.2010, 18:19     Динамический список #5
Em1ly, А что пугает?
std::cout - вывод в поток вывода
std::cin - ввод из потока ввода
std::cerr - вывод в поток ошибки (?)
Em1ly
 Аватар для Em1ly
5 / 5 / 0
Регистрация: 21.05.2010
Сообщений: 153
12.09.2010, 18:20  [ТС]     Динамический список #6
Lavroff, то, что я не помню, чтобы нам в лекции давали такие обозначения.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.09.2010, 18:22     Динамический список #7
Em1ly, а просто cout, cin, cerr? Или вы printf пользуетесь? оО
Судя по вашему коду - нет.
using namespace std;
У вас включено. У easybudda - нет. Что правильнее по сути. Поэтому он пишет через оператор разрешения видимости ::, напрямую обращаясь к пространству имен std; а не подключая его с помощью using.
Em1ly
 Аватар для Em1ly
5 / 5 / 0
Регистрация: 21.05.2010
Сообщений: 153
12.09.2010, 18:28  [ТС]     Динамический список #8
Lavroff, о. Ну, поэтому меня и пугает. Нас то по другому учат.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.09.2010, 19:10     Динамический список #9
Цитата Сообщение от Em1ly Посмотреть сообщение
Нас то по другому учат.
Судя по тому коду, который тут порой выкладывают, да и по Вашему тоже, действительно неправильно учат. "Абы как, лишь бы задачу решило" - это абсолютно ложный путь! К примеру:
Цитата Сообщение от Em1ly Посмотреть сообщение
randomize();
вам хотябы намекнули, что эта функция к стандартной библиотеке никакого отношения не имеет и работает только в компиляторах от борланд?
Цитата Сообщение от Em1ly Посмотреть сообщение
else { here = new node;
if (here == NULL)
В программах, скомпилированных более-менее вменяемым компилятором оператор new не возвращает NULL в случае ошибки, а выбрасывает исключение (exception). В общем то ли расчёт исключительно на дремучий борланд турбо с++ (или как там его), то ли позаимствовали из С
C
1
2
3
4
if ( ( structPtr = malloc(sizeof(struct_type)) ) == NULL ){
  perror("malloc");
  exit(1);
}
Ну тогда препод сам разницы между С и С++ не понимает, а она есть и большая. Особенно в плане работы с динамической памятью...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2010, 19:17     Динамический список
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Em1ly
 Аватар для Em1ly
5 / 5 / 0
Регистрация: 21.05.2010
Сообщений: 153
12.09.2010, 19:17  [ТС]     Динамический список #10
easybudda, да уж. Я сама не в диком восторге от того, как нам преподают язык C++.
Yandex
Объявления
12.09.2010, 19:17     Динамический список
Ответ Создать тему
Опции темы

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