#include
#include
using namespace std;
int main()
{
int i = 0;
stack p1, p2;
while (i != 5) {
int a;
cin >> a;
p1.push(a); // добавляем введенные числа
i++;
}
while (!p1.empty())
{
p2.push(p1.top());
p1.pop();
}
cout << "Head of p2 is " << p2.top() << endl;
return (0);
}
Задание: Даны указатели p1 и p2 на вершины двух непустых стеков. Переместить все элементы из первого стека во второй (в результате элементы первого стека будут располагаться во втором стеке и в порядке, обратном исходному) и вывести адрес новой вершины стека.
Надо написать программу без библиотеки стэк, т. е. вручную. Пробовал вручную написать через структуру и функции - не получалось.
C/C++
Программа на с++ с использованием стека
#include <iostream>
using namespace std;
class Stack {
public:
Stack(size_t buffer = 100)
: buffer(buffer), stack(new int[buffer]), index(0) {
}
Stack(const initializer_list<int> ilst)
: buffer(ilst.size()), stack(new int[buffer]), index(0) {
for (auto value : ilst) push(value);
}
Stack(const Stack& s)
: buffer(s.capacity()), stack(new int[buffer]), index(s.index) {
for (auto i = 0U; i < index; ++i) stack[i] = s.stack[i];
}
Stack(Stack&& stack)
: buffer(stack.capacity()), stack(move(stack.stack)), index(0) {
}
~Stack() {
if (stack != nullptr) {
delete[] stack;
stack = nullptr;
buffer = index = 0;
}
}
Stack operator=(const Stack& s) {
if (this != &s) {
buffer = s.buffer;
index = s.index;
for (auto i = 0U; i < index; ++i) stack[i] = s.stack[i];
}
return *this;
}
Stack operator=(Stack&& s) {
if (this != &s) {
buffer = s.buffer;
index = s.index;
stack = move(s.stack);
}
return *this;
}
void push(int value) {
if (index == buffer) {
auto tmp = *this;
delete[] stack;
buffer *= 2;
stack = new int[buffer];
for (auto i = 0U; i < index; ++i) stack[i] = tmp.stack[i];
}
stack[index] = value;
++index;
}
void push(const initializer_list<int> ilst) {
for (auto value : ilst) push(value);
}
int& top() {
return stack[index - 1];
}
void pop() {
--index;
}
bool empty()const {
return 0 == index;
}
size_t size()const {
return index;
}
size_t capacity()const {
return buffer;
}
private:
size_t buffer;
int* stack;
size_t index;
};
void show(Stack& a) {
cout << "top: ";
if (!a.empty()) cout << a.top() << '\n';
else puts("empty");
cout
<< "size: " << a.size() << '\n'
<< "capacity: " << a.capacity() << '\n'
<< "--------------\n";
}
int main() {
Stack p1{ 25, 38, 54, 25, 69, 37, 25, 98, 47, 65 };
show(p1);
Stack p2{ 48, 13, 55, 67 };
show(p2);
while (!p1.empty()) {
p2.push(p1.top());
p1.pop();
}
show(p2);
system("pause");
}
using namespace std;
class Stack {
public:
Stack(size_t buffer = 100)
: buffer(buffer), stack(new int[buffer]), index(0) {
}
Stack(const initializer_list<int> ilst)
: buffer(ilst.size()), stack(new int[buffer]), index(0) {
for (auto value : ilst) push(value);
}
Stack(const Stack& s)
: buffer(s.capacity()), stack(new int[buffer]), index(s.index) {
for (auto i = 0U; i < index; ++i) stack[i] = s.stack[i];
}
Stack(Stack&& stack)
: buffer(stack.capacity()), stack(move(stack.stack)), index(0) {
}
~Stack() {
if (stack != nullptr) {
delete[] stack;
stack = nullptr;
buffer = index = 0;
}
}
Stack operator=(const Stack& s) {
if (this != &s) {
buffer = s.buffer;
index = s.index;
for (auto i = 0U; i < index; ++i) stack[i] = s.stack[i];
}
return *this;
}
Stack operator=(Stack&& s) {
if (this != &s) {
buffer = s.buffer;
index = s.index;
stack = move(s.stack);
}
return *this;
}
void push(int value) {
if (index == buffer) {
auto tmp = *this;
delete[] stack;
buffer *= 2;
stack = new int[buffer];
for (auto i = 0U; i < index; ++i) stack[i] = tmp.stack[i];
}
stack[index] = value;
++index;
}
void push(const initializer_list<int> ilst) {
for (auto value : ilst) push(value);
}
int& top() {
return stack[index - 1];
}
void pop() {
--index;
}
bool empty()const {
return 0 == index;
}
size_t size()const {
return index;
}
size_t capacity()const {
return buffer;
}
private:
size_t buffer;
int* stack;
size_t index;
};
void show(Stack& a) {
cout << "top: ";
if (!a.empty()) cout << a.top() << '\n';
else puts("empty");
cout
<< "size: " << a.size() << '\n'
<< "capacity: " << a.capacity() << '\n'
<< "--------------\n";
}
int main() {
Stack p1{ 25, 38, 54, 25, 69, 37, 25, 98, 47, 65 };
show(p1);
Stack p2{ 48, 13, 55, 67 };
show(p2);
while (!p1.empty()) {
p2.push(p1.top());
p1.pop();
}
show(p2);
system("pause");
}
Iwan Wiebe
спасибо большое)
Похожие вопросы
- Программа на С++ с использованием vector
- Здравствуйте, помогите пожалуйста написать программу на C++ с использованием функций
- Имя массива после инициализации принимает адрес в стеке, который указывает на адрес в куче? (Си)
- Написать программу, которая сравнивает число перестановок элементов при использовании сортировки «пузырьком» (усовершенс
- C++ класс Реализация класс стека,
- Составить программу на С++ Программирование с использованием классов. Создание и работа с классами.
- 9.Составить программу с использованием функции
- Помогите написать программу с использованием функций, с++
- C++: где vector хранит внутренний массив? В стеке или в куче?
- Если есть одно направленый стек и двух направленый то почему нет трех направленого по аналогии с многомерными масивами?