0 / 0 / 0
Регистрация: 31.10.2021
Сообщений: 16
1

Операторы копирования, *, +

07.11.2021, 15:53. Показов 287. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В классе односвязного списка необходимо реализовать операторы копирования, оператор «+» (оператор должен возвращать адрес головы нового списка, содержащего элементы обоих списков для которых вызывался оператор), оператор «*» (оператор должен возвращать адрес головы нового списка, содержащего только общие элементы обоих
списков для которых вызывался оператор).

Помогите пожалуйста! Может у кого то есть хотя бы пример чего-то похожего.

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
#include <iostream>
#include <stdexcept>
 
struct NodeBase {
    NodeBase *next;
    NodeBase(): next{this} {}
    NodeBase(NodeBase *after): next{after->next} {
        after->next = this;
    }
};
 
template<typename T>
struct Node : public NodeBase {
    T data;
    Node(NodeBase *after, const T &data): NodeBase{after}, data{data} {}
};
 
template<typename T>
class LinkedList {
public:
    LinkedList(): base{} {}
    LinkedList(const LinkedList<T> &other) = delete;               // лень писать, удаляю
    LinkedList<T> &operator=(const LinkedList<T> &other) = delete; // лень писать, удаляю
    virtual ~LinkedList() {
        erase();
    }
    bool isEmpty() const {
        return base.next == &base;
    }
    void pushFront(const T &value) {
        new Node<T>(&base, value);
    }
    void popFront() {
        remove(&base, base.next);
    }
    const T &front() const {
        if (isEmpty()) {
            throw std::runtime_error("empty");
        }
        return ((Node<T>*)base.next)->data;
    }
    void erase() {
        while (!isEmpty()) {
            remove(&base, base.next);
        }
    }
private:
    void remove(NodeBase *prev, NodeBase *node) {
        if (prev->next != prev) {
            prev->next = node->next;
            delete node;
        }
    }
    NodeBase base;
};
 
template<typename T>
class Stack : public LinkedList<T> {
};
 
template<class Iterator>
bool isCorrectParentheses(Iterator begin, Iterator end) {
    Stack<char> stack;
    while (begin != end) {
        if (*begin == '(' || *begin == '[' || *begin == '{') {
            stack.pushFront(*begin);
        } else if (*begin == ')' || *begin == ']' || *begin == '}') {
            if (stack.isEmpty()) {
                return false;
            }
            switch (stack.front()) {
                case '(':
                    if (*begin != ')') {
                        return false;
                    }
                    break;
                case '[':
                    if (*begin != ']') {
                        return false;
                    }
                    break;
                case '{':
                    if (*begin != '}') {
                        return false;
                    }
                    break;
            }
            stack.popFront();
        }
        begin++;
    }
    return stack.isEmpty();
}
 
int main() {
    std::string a = "({x-y-z}*[x+2y]-(z+4x))";
    std::cout << isCorrectParentheses(a.begin(), a.end()) << std::endl;
    std::string b = "([x-y-z}*[x+2y)-{z+4x)]";
    std::cout << isCorrectParentheses(b.begin(), b.end()) << std::endl;
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2021, 15:53
Ответы с готовыми решениями:

С++.Операторы в С++: условные операторы, операторы break и continue
Выяснить, пересекаются ли параболы у=аx2+bx+с и у=dx2+ex + f. При положительном ответе найти точки...

Не используя оператор if else, записать выражения, применяя операторы сравнения и логические операторы and, or,not
1) Записать логическое выражение для условия, если физика, математика и информатика сданы на 4 или...

Условные операторы и операторы цикла, проверка корректности вводимых данных
Привет, ребята. Помогите, пожалуйста, написать код для данной задачи. Примечание: необходимо...

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений)
Задачка Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить...

«Языки и технологии программирования» «Операторы цикла. Условные операторы»
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно....

0
07.11.2021, 15:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2021, 15:53
Помогаю со студенческими работами здесь

Операторы присваивания, ввода- вывода. Операторы ветвления, выбора
Даны два ненулевых числа. Найти их сумму, разность, произведение, частное, остаток и целую часть от...

Операторы языка С++: операторы цикла (исправьте программу)
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace std; int main() {...

Операторы принятия решения и операторы цикла.
Пожалуйста, помогите. Нужно срочно сделать задания: 1)Ввести с клавиатуры три символа sym1, sym2,...

Операторы ветвления и операторы передачи управления
1. Вычислить значения функции F при вещественных a, b, c, x, вводимых с клавиатуры. 2....

Операторы цикла и операторы передачи управления
Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры. Вывести количество...

Переписать символы с входящего рядка в выходящий, меняя операторы языка паскаль на операторы языка С++ := на =, = на ==, # на !=
Переписать символы с входящего рядка в выходящий, меняя операторы языка паскаль на операторы языка...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru