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

Упорядоченный односвязный список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите с задачами на функции в С++ http://www.cyberforum.ru/cpp-beginners/thread428336.html
Помогите пожалуйста с двумя задачами: 1)Определить сумму элементов до минимального элемента. Описать в виде отдельной функции количество элементов до максимального элемента массива. 2)Заменить элементы столбца их абсолютным значением. Вывести на экран количество отрицательных элементов в столбце. В виде отдельной функции выполнить действие для столбцов у которых последний элемент имеет...
C++ Объединение 2-х очередей Здравствуйте. Подскажите пожалуйста, как можно объединить 2 не пустые очереди? http://www.cyberforum.ru/cpp-beginners/thread428324.html
Задача на структуры C++
моя попытка решения но я в нем не уверен int main() { struct {struct{char naim; char rezh;}film; struct {char fio; char rol;}act; struct{char naimkin;char adres; struct{int date;int time;}kino; struct{int sum;}mes; }teatr; struct{char naimch; int date1; int time1;}kanal; }card; strcpy(card.film.naim,"Avatar");
C++ Кто знает как из DEVc++ транслировать в C++?
Есть программа написанная в Dev, которая не работает в Visual C++. Как данную программу перевести в Си? В чем их особенности? Вот сама программа, если не трудно, то переведите в С++, ну или хотя бы подскажите как это сделать мне. буду очень признателен) #include <iostream> #include <cmath> #include <string> #include <cstring> #include <cstdio> #include <cstdlib> //#include<stdlib.h>
C++ проблема с закрытием экрана http://www.cyberforum.ru/cpp-beginners/thread428282.html
Вот код: #include <iostream> int main() { using namespace std; int carrots; cout << "how many carrots do you have?" << endl; cin >> carrots;
C++ Старик Хоттабыч, хочу, что бы результат возвращаемый функцией не стакался... Доброго времени суток, уважаемые форумчане. У меня такая проблемка. Возвращаемый функцией результат, а это у меня определенный элемент массива при определенном условии, при использовании в цикле for/while прибавляется(стакается) с предыдущим возвращаемым результатом функции. Как, а главное почему это происходит? И как это устранить? Ниже тот самый "кот": #include <iostream> #include... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.01.2012, 03:40     Упорядоченный односвязный список
aquila, а стандартный std::set из STL вам по религиозным причинам использовать не разрешают? Вот нагородил не бог весть что, но вроде работает (значения не дублируются - так задумано)
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
#include <iostream>
 
class DescendantSortedList {
    class Node {
        int value;
        Node * next;
    public:
        Node(int val) : value(val), next(0) {}
        Node * Next() const { return next; }
        void Next(Node * n) { next = n; }
        int Value() const { return value; }
        void Value(int val) { value = val; }
    };
    
    Node * head;
    
    DescendantSortedList(const DescendantSortedList &);
    DescendantSortedList & operator = (const DescendantSortedList &);
    
public:
    DescendantSortedList() : head(0) {}
    ~DescendantSortedList() {
        Node * tail;
        while ( head ){
            tail = head->Next();
            delete head;
            head = tail;
        }
    }
    void operator * (int m) {
        for ( Node * n = head; n; n = n->Next() )
            n->Value(n->Value() * m);
    }
    DescendantSortedList & operator << (int val) {
        Node * n = new Node(val);
        if ( ! head ) {
            head = n;
        }
        else if ( head->Value() < val ){
            n->Next(head);
            head = n;
        }
        else if ( head->Value() == val ){
            delete n;
        }
        else {
            Node * f;
            for ( f = head; f->Next() && f->Next()->Value() > val; f = f->Next() )
                ;
            if ( f->Next() ) {
                if ( f->Next()->Value() == val )
                    delete n;
                else {
                    n->Next(f->Next());
                    f->Next(n);
                }
            }
            else
                f->Next(n);
        }
        
        return *this;
    }
    void dump(std::ostream & ost) const {
        for ( Node * n = head; n; n = n->Next() )
            ost << n->Value() << " ";
        ost << std::endl;
    }
};
 
int main(){
    DescendantSortedList dsl;
    
    dsl << 13 << 4 << 69 << 8 << 89 << 14 << 13 << 90;
    dsl.dump(std::cout);
    dsl * 2;
    dsl.dump(std::cout);
    
    return 0;
}
Добавлено через 49 минут
Просто из спортивного интереса написал:
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
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
#include <functional>
#include <vector>
 
class DescendantSortedList : public std::multiset<int, std::greater_equal<int> > {
    DescendantSortedList(const DescendantSortedList &);
    DescendantSortedList & operator = (const DescendantSortedList &);
public:
    DescendantSortedList() : std::multiset<int, std::greater_equal<int> >() {}
    ~DescendantSortedList() {}
    DescendantSortedList & operator << (int val) {
        insert(val);
        return *this;
    }
    friend std::ostream & operator << (std::ostream & ost, const DescendantSortedList & dsl) {
        std::copy(dsl.begin(), dsl.end(), std::ostream_iterator<int>(ost, " "));
        return ost;
    }
    DescendantSortedList & operator * (int m){
        std::vector<int> vec;
        for ( std::multiset<int, std::greater_equal<int> >::const_iterator i = begin(); i != end(); ++i )
            vec.push_back(*i * m);
        clear();
        std::copy(vec.begin(), vec.end(), std::inserter(*this, begin()));
        return *this;
    }
};
 
int main(){
    DescendantSortedList dsl;
    
    dsl << 33 << 1 << 14 << 58 << 19 << 24 << 33;
    
    std::cout << dsl << std::endl << dsl * 2 << std::endl;
    
    return 0;
}
 
Текущее время: 01:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru