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

Списки, стеки, очереди - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двумерный массив. Поменять четные и нечетные строки. http://www.cyberforum.ru/cpp-beginners/thread178313.html
Всем доброго времени суток. Задание таково "Дана матрица М(6х4). Ввести данные в матрицу с клавиатуры. Поменять местами четные и не четные строки матрицы." С первой частью задания справился. А вот как поменять местами четные и не четные строки не догоняю. Сделать это нужно обязательно используя указатели. #include "stdafx.h" #include "conio.h" int _tmain(int argc, _TCHAR* argv) { int a;...
C++ Функции и перегруженный оператор Помогите реализовать на С++: 1.Определить пользовательский тип данных fraction (дробь), представляющий собой структуру из 2х полей: числителя (long m) и знаменателя (unsigned long n) 2. На основе создания функции НОД(найбольший общий делитель), вида unsigned long nod(unsigned long, unsigned long); 3 Используя функцию nod, создать функцию, производящую сокращение дроби: void reduce... http://www.cyberforum.ru/cpp-beginners/thread178312.html
Найти элементы, которые встречаються в массиве не менее двух раз и лежащие в заданном диапазоне C++
Дано натуральное число N и одномерный массив A1, A2, …, AN натуральных чисел. Найти элементы, которые встречаються в массиве не менее двух раз и которые лежат в диапазоне значений от m1 до m2 (определяються пользователем). Указать число вхождений найденных элементов.
C++ Найти минимальную сумму положительных элементов диагоналей, параллельных побочной диагонали
Помогите решить. 1. построить упорядоченный массив a из элементов массива b и c. Массивы b и c предварительно упорядочены по возрастанию. 2. дан массивa. Найти минимальную сумму положительных элементов диагоналей, параллельных побочной диагонали pomogite rewit 1. postroit uporyado4niy massiv a iz elementov massiva b i c. massivy b i c predvaritelno uporyado4eni po vozvarastaniyu 2.dan...
C++ Количество пятниц http://www.cyberforum.ru/cpp-beginners/thread178296.html
Вычислить кол-во пятниц, приходящихся на 13-е числа столетия с номером n, где n - заданное натуральное число.
C++ Вычисление факториала большого числа написать программу, которая вычисляла бы факториал заданного большого числа, например 500, и результат вычислений с точностью до единицы выводила на экран. подробнее

Показать сообщение отдельно
Peoples
1107 / 611 / 412
Регистрация: 06.02.2016
Сообщений: 1,605
Записей в блоге: 11
Завершенные тесты: 4
08.10.2016, 15:36     Списки, стеки, очереди
Линейный список
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
// структура элемента (Узла)
template<typename T>
struct Node {              //  узел (собственно это и является элементом списка)
    T x;                 // информационное поле, которое хранит значение определённого узла
    Node *next;          // указатель на структуру Node
};
// класс Однонаправленный список
template<typename T>
class UList {            // класс однонаправленный список
    private:
        Node<T> *head;             // указатель на последний активный элемент списка( голова списка(начало))
    public:
        UList();               // Конструктор инициализирующий пустой список
        ~UList();              // деструктор для удаления элементов и освобождения памяти
        void AddToHead(T y);     // добавление элемента в начало списка
        void ShowL();           // вывод списка
        int  Size();          // количество элементов списка
        void delNum(int n);    // удаление элемента по номеру
        void printNum(int n);  // вывод элемента по номеру
        void findValue(T v); // есть ли элемент со значением v  и его позиция
        void delValue(T v);  // удалить элемент по значению
        bool empty();         // проверка списка на пустоту
        void AddToTail(T x);  // добавление элемента в конец списка
        T minE();   // нахождение минимального элемента
        T maxE();   // нахождение максимального элемента
        void Lsort();  // сортировка списка
};
/////////////////////////////////////////////////////////////////////////////////////////////////
template<typename T>
UList<T>::UList() {
    head=NULL;
}
template<typename T>
UList<T>::~UList() {
    while(head!=NULL) {
        Node<T> *temp=head->next;  // элемент temp равен следующему элементу идущему за head
        delete head;      // освобождаем адрес начального элемента (головы(1 элемента))
        head=temp;     // присваиваем началу предыдущий элемент
    }
}
template<typename T>
void UList<T>::AddToHead(T y) {
    Node<T> *temp=new Node<T>; // создаём новый элемент в списке
    temp->x=y;          // присваиваем ему значение, переданного аргумента
    temp->next=head;   // элемент следующий за temp равен первому элементу списка
    head=temp;        // приравниваем первому элементу списка temp
 
}
template<typename T>
void UList<T>::ShowL() {
    Node<T> *temp=head;     // temp начальный элемент списка
    while(temp!=NULL) {     // пока он есть
        cout<<temp->x<<" "; // выводим значение
        temp=temp->next;  // 1 элементов становится элементу следующий за temp
    }
}
template<typename T>
int UList<T>::Size() {
    int c=0;                 // счётчик элементов
    Node<T> *temp=head;           // temp 1 элемент
    while(temp!=NULL) {      // пока есть элемент
        temp=temp->next;  // двигаем temp (1 становится элемент за ним)
        c++;               // пока элементы есть наращиваем счётчик
    }
    return c;                // возвращаем результат
}
template<typename T>
void UList<T>::delNum(int n) {
    Node<T> *temp=head;
    Node<T> *help;
    if(temp!=NULL && n<=Size()) {          // если в списке есть элементы и искомый номер не превышает размер списка, то продолжаем
        for(int i=0; i!=n; i++) {          /// двигаем значение tepm он начала списка на n элементов
            help=temp;               // предыдущий элемент
            temp=temp->next;         // сдвигаем temp
        }
        if(temp==head) {             // если temp равен 1  элементу , то 1 элемент равен следующему за temp(2 элементу)
            head=temp->next;
        } else {
            help->next=temp->next;   // иначе предыдущий элемент равен следующий за temp элементу
        }
        delete temp;              // наш элемент удаляется
    }
}
template<typename T>
void UList<T>::printNum(int n) {
    Node<T> *temp=head;      // temp начало списка
    if(temp!=NULL && n<=Size()) {   // пока список есть  и искомый элемент не боле размера списка
        for(int i=0; i!=n; i++) {    // передвигаем элемент на n позиций
            temp=temp->next;
        }
        cout<<temp->x<<endl;     // выводим значение элемента
    }
}
template<typename T>
void UList<T>::findValue(T v) {
    int pos=0;           // начальная позиция
    Node<T> *temp=head;
    int f=0;      // индикатор
    while(temp!=NULL) {     // пока список не пуст
        if(temp->x==v) {     // если значение х=v , то f++
            f++;
            break;
        }
 
        temp=temp->next; // если не равно, то передвигаем элемент
        pos++;  // наращиваем позицию
 
    }
    if(f>0) {
        cout<<"Yes"<<" "<<"Position: "<<pos<<endl;
    } else cout<<"No";
}
template<typename T>
void UList<T>::delValue(T v) {
    Node<T> *temp=head,*help;
    while(temp!=NULL && temp->x!=v) {  // пока список не пуст и значение temp неравно v
        help=temp;  // help принимает предыдущее значение temp
        temp=temp->next;    //  temp перемещается
    }
    if(temp==head) {
        head=temp->next;
    } else {
        help->next=temp->next;
    }
    delete temp;  // удаляем в зависимости от результата
}
template<typename T>
bool UList<T>::empty() {
    if(head==NULL) {   // если 1 элемента в списке нет, вернуть 1, иначе 0
        return true;
    } else return false;
}
template<typename T>
void UList<T>::AddToTail(T x) {
    Node<T> *temp=new Node<T>; // создаём новый элемент
    temp=head;   // он указывает на начало
    while(temp->next!=NULL) {  // передвигаем до предпоследнего элемента
        temp=temp->next;
 
    }
    Node<T> *t=new Node<T>;   // ещё новый
    t->x=x;   // присваиваем ему х
    t->next=NULL;  // указываем что за ним нет элементов
    temp->next=t;  // присваиваем предпоследний элемент ему
}
template<typename T>
T UList<T>::minE() {
    Node<T> *temp=head;
    T min=temp->x;     // минимальный элемент равен значению 1 элемента
    while(temp!=NULL) {     // пока список не пуст
        if(temp->x<min) {  // если значение элемента меньше минимального
            min=temp->x;      // этот элемент становится минимальным
        } else {
            temp=temp->next;     // иначе передвигаем элемент дальше
        }
    }
    return min;   // возвращаем минимальный элемент
}
template<typename T>
T UList<T>::maxE() {   // аналогично минимальному
    Node<T> *temp=head;
    T max=temp->x;
    while(temp!=NULL) {
        if(temp->x>max) {
            max=temp->x;
        } else {
            temp=temp->next;
        }
    }
    return max;
}
template<typename T>
void UList<T>::Lsort() {
    for(int i=0; i!=Size(); i++) {  // проводим size()-1 итерации, так как head-элемент из-за перестановок будет меняться
        Node<T> *temp=head;
        while(temp->next!=NULL) {       // до последнего элемента
            if(temp->x>temp->next->x) {   // сравниваем
                int t=temp->x;     // swqp
                temp->x=temp->next->x;
                temp->next->x=t;
            }
            temp=temp->next;  // передвигаем
        }
    }
}
////////////////////////////////////////////////////////////////////////////////////////
int main() {
    UList<int> list;
    for(int i=0; i!=5; i++) {
        list.AddToHead(i);
    }
    cout<<endl;
    list.ShowL();
    list.delNum(2);
    cout<<endl;
    cout<<list.Size();
    cout<<endl;
    list.printNum(3);
    cout<<endl;
    list.findValue(0);
    cout<<endl;
    list.delValue(0);
    list.AddToTail(9);
    list.ShowL();
    cout<<endl;
    cout<<"Min: "<<list.minE()<<endl;
    cout<<"Max: "<<list.maxE()<<endl;
    list.Lsort();
    list.ShowL();
    return 0;
}
Добавлено через 13 минут
C++
1
2
T Head(); // возвращает 1 элемент списка
T Tail(); // возвращает последний элемент списка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename T>
T UList<T>::Head() {
    if(head==NULL) {     // если список пуст
        cout<<"List is empty"<<endl;  // сообщение
    } else
        return head->x;  // иначе выводит значение 1 элемента
}
 
template <typename T>
T UList<T>::Tail() {
    Node<T> *temp=head;
    while(temp->next!=NULL) {  // пока temp неравен последнему элементу 
        temp=temp->next;       // перемещаем temp
    }
    return temp->x; // возвращаем значение последнего 
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru