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

Сортировка ЛОС - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс-динамический массив... http://www.cyberforum.ru/cpp-beginners/thread156875.html
Нужен такой класс. А как его лучше написать? Через связанные списки? Нужно, чтобы он был "быстрым"... Основные методы: установка размера, удаление, доступ к элементам... Главное чтобы при изменении размера не пропадало содержимое... Может уже существует готовый?
C++ Строковый анализатор Подскажите почему код выдает всякий мусор, подает звуковые сигналы Должен работать так: Если введешь так: "11/23/34" или "11.23.34" или "11.23/34", то должен получить 11 23 34 #include "stdafx.h" #include <conio.h> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread156874.html
C++ Квадрат числа
Как сделать чтобы квадрат находился напротив числа??? #include <windows.h> #include <iostream> using namespace std; void main () { SetConsoleOutputCP(1251); //Квадрат первых десяти положительных чисел. cout<<"\t\t Таблица квадратов."<<endl;
Шифровальщик паролей C++
Здравствуйте, уважаемые гуру и более другие программисты. Я, как видно из моего ника, полный нуб. Это обидно. А ведь очень хочется разобраться, как эта куча железяк работает изнутри. Я пару дней тщетно штудировл поиск, но толку было мало. У меня есть Visual 2008, я научился компилить программу плана cout<<"HELLO WORLD"; да и вообще много чего в консоли. Но вот дальше полный затык....
C++ ООП - вопрос про деструктор http://www.cyberforum.ru/cpp-beginners/thread156838.html
#include <iostream> class oop { int a; char * name; public: oop(char *,int); ~oop(); void show();
C++ Таймеры не работают делаю программу без всяких mfc и afc пробовал и void OnTimer(UINT nIDEvent) { logfile_f("\non TIMER CAME!\n"); MessageBox(NULL, TEXT("on Test!"), TEXT("Yes2!"), 0); } подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
03.08.2010, 08:36     Сортировка ЛОС
Переделал твою программу для шаблонного класса списка:
myList.h
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#ifndef MYLIST_H
#define MYLIST_H
 
#include <stdexcept>
#include <iostream>
 
namespace my
{
    template<class M>
    struct node
    {
        M           value;
        node<M>*    next;
        node(M val) :  value(val), next(NULL) {}
    };
 
    template<class T>
    class list
    {
    public:
        list();
        list(const list<T>& rhs);
        ~list();
        void push(const T& rhs); // Добавление элемента в конец списка
        void unshift(const T& rhs); // Добавление элемента в начало списка
        T pop(); // Удаление элемента с конца
        T shift(); // Удаление элемента с начала
        bool empty() const; // true, если список пуст
        size_t size() const; // Размер списка
        void show(char delim = EMPTY) const; // Печать массива
 
        void sort(); // Сортировка списка
    private:
        node<T>*    m_pFirst; // Указатель на первый элемент списка
        size_t      m_nSize; // Размер списка
        static const char EMPTY = ' ';
    };
 
 
    template<class T>
    list<T>::list()
        : m_pFirst(NULL), m_nSize(0)
    {
    }
 
    template<class T>
    list<T>::list(const list<T>& rhs)
        : m_nSize(rhs.m_nSize), m_pFirst(NULL)
    {
        if(m_nSize)
        {
            node<T>* ptr = rhs.m_pFirst;
            if(ptr)
                m_pFirst = new node<T>(ptr->value);
            ptr = ptr->next;
            node<T>* temp = m_pFirst;
            while(ptr)
            {
                node<T>* newNode = new node<T>(ptr->value);
                temp->next = newNode;
                temp = temp->next;
                ptr = ptr->next;
            }
        }
    }
 
    template<class T>
    list<T>::~list()
    {
        while(m_pFirst)
        {
            node<T>* temp = m_pFirst;
            m_pFirst = m_pFirst->next;
            delete temp;
            --m_nSize;
        }
    }
 
    template<class T>
    void list<T>::push(const T& rhs)
    {
        if(!m_pFirst)
            m_pFirst = new node<T>(rhs);
        else
        {
            node<T>* temp = m_pFirst;
            while(temp->next)
                temp = temp->next;
            node<T>* newNode = new node<T>(rhs);
            temp->next = newNode;
        }
        ++m_nSize;
    }
 
    template<class T>
    void list<T>::unshift(const T& rhs)
    {
        node<T>* newNode = new node<T>(rhs);
        newNode->next = m_pFirst;
        m_pFirst = newNode;
        ++m_nSize;
    }
 
    template<class T>
    T list<T>::pop()
    {
        if(!m_pFirst)
            throw(std::runtime_error("Unable to delete the last node: the list is empty")); 
        node<T>* temp = m_pFirst;
        while(temp->next)
            temp = temp->next;
        node<T>* delNode = temp->next;
        T returnValue = delNode->value;
        delete delNode;
        temp->next = NULL;
        --m_nSize;
        return returnValue;
    }
 
    template<class T>
    T list<T>::shift()
    {
        if(!m_pFirst)
            throw(std::runtime_error("Unable to delete the first node: the list is empty")); 
        node<T>* temp = m_pFirst;
        T returnValue = temp->value;
        m_pFirst = m_pFirst->next;
        delete temp;
        --m_nSize;
        return returnValue;
    }
 
    template<class T>
    bool list<T>::empty() const
    {
        return (m_nSize == 0);
    }
 
    template<class T>
    size_t list<T>::size() const
    {
        return m_nSize;
    }
 
    template<class T>
    void list<T>::show(char delim) const
    {
        node<T>* temp = m_pFirst;
        while(temp)
        {
            std::cout << temp->value << delim;
            temp = temp->next;
        }
        std::cout << std::endl;
    }
 
    template<class T>
    void list<T>::sort()
    {
        for(node<T>* ptr1 = m_pFirst; ptr1; ptr1 = ptr1->next)
        {
            for(node<T>* ptr2 = m_pFirst; ptr2->next; ptr2 = ptr2->next)
            {
                if((ptr2->value) > (ptr2->next->value))
                {
                    T temp = ptr2->value;
                    ptr2->value = ptr2->next->value;
                    ptr2->next->value = temp;
                }
            }
        }
    }
};
 
#endif // MYLIST_H

main.cpp
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
#include <iostream>
#include <stdexcept>
#include <ctime>
 
#include "myList.h"
 
int main()
{
    try
    {
        srand(static_cast<int>(time(NULL)));
        const int MAX = 10;
        my::list<int> lst;
        for(size_t i = 0; i < 5; ++i)
        {
            lst.push(rand() % MAX);
            lst.unshift(rand() % MAX);
        }
        std::cout << "Unsorted list:" << std::endl;
        lst.show();
        lst.sort();
        std::cout << "Sorted list:" << std::endl;
        lst.show();
    }
    catch(std::exception& e)
    {
        std::cout << e.what() << std::endl;
    }
    system("pause");
    return EXIT_SUCCESS;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru