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

Разработать динамический массив хранящий два стека

27.03.2022, 11:46. Показов 360. Ответов 3

Author24 — интернет-сервис помощи студентам
Прошу помощи с написанием программы на языке С++. Не понимаю, как можно это всё реализовать.

Динамический массив хранит два стека : первый располагается с начала массива и растет к его концу, второй – располагается с конца массива и растет к его началу.
Функции :
· поместить элемент в стек
· выбрать элемент из стека
· стек пуст
· стек заполнен
· вывести содержимое стека
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2022, 11:46
Ответы с готовыми решениями:

Описать класс, хранящий динамический массив
Нужно написать простую программу: описать класс, хранящий динамический массив, два производных...

Реализация стека через динамический массив.Где ошибка?
program lab1; type stack = array of integer; var s:stack; i,size, sum:integer; procedure...

Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями, а
Помогите срочно составить задачу: Дан указатель Р1 на вершину непустого стека. Создать два новых...

Дан указатель Top1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями,
Здравствуйте, Уважаемые пользователи!!! Помогите пожалуйста решить данную задачу : Дан указатель...

Создать два новых стека, с четными и нечетными элементами первоначального стека
Дано указатель P1 на вершину непустого стека. Создать два новых стека , переместив в первый из них...

3
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,697
27.03.2022, 12:48 2
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
#include<iostream>
#include <deque>
using namespace std;
template<class T>
class Stack2:public deque<T>
{
    int N1,N2;
public:
    Stack2():N1(0),N2(0),deque(){}
    void push1(const T& x){
        push_back(x);N1++;
    }
    void push2(const T& x){
        push_front(x);N2++;
    }
    void pop1(){
        if(N1>0){pop_back();N1--;}
    }
    void pop2(){
        if(N2>0){pop_front();N2--;}
    }
    T get1(){return back();}
    T get2(){return front();}
    bool empty1(){return N1==0;}
    bool empty2(){return N2==0;}
};
int main()
{
    Stack2<int> st;
    for(int i=1;i<10;i++)
    {
        st.push1(i);
        st.push2(-i);
    }
 
    while(!st.empty1())
    {
        cout<<st.get1()<<' ';
        st.pop1();
    }
    cout<<endl;
    while(!st.empty2())
    {
        cout<<st.get2()<<' ';
        st.pop2();
    }
    cout<<endl;
    cin.get();
    return 0;
}
Замечания:
1.К сожалению, не придумал изящного метода определения пустых стеков.
Пришлось завести собственные счетчики элементов стеков (N1 и N2).
Можно было бы вставить какой-нибудь разграничитель.
Но как его отслеживать не понятно. Итератор на него может меняться.

2. Метод "Стек заполнен" не реализован, т.к. дек может неограниченно увеличиваться.
0
0 / 0 / 0
Регистрация: 27.03.2022
Сообщений: 2
29.03.2022, 00:00  [ТС] 3
zss, выдаёт ошибки при отладке, можно ли как-то расписать с комментариями, если не трудно? просто не совсем понятно, что тут делается
0
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,697
29.03.2022, 08:30 4
Цитата Сообщение от cloudy8 Посмотреть сообщение
выдаёт ошибки при отладке
В VS 2008 Ошибок нет.
VS 2017 более строгие условия компиляции, приходится добавлять,
казалось бы, очевидные моменты:
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
#include<iostream>
#include <deque>
using namespace std;
template<class T>
class Stack2 :public deque<T> // наследуем от дека
{
    int N1, N2; // к-во элементов в 1 и 2 стеках
public:
    Stack2() :N1(0), N2(0), deque<T>() {}
    void push1(const T& x) {  // запись в 1 стек
        this->push_back(x); N1++;
    }
    void push2(const T& x) { // запись во 2 стек
        this->push_front(x); N2++;
    }
    void pop1() { // извлечение из 1 стека
        if (N1 > 0) { this->pop_back(); N1--; }
    }
    void pop2() { // извлечение из 2 стека
        if (N2 > 0) { this->pop_front(); N2--; }
    }
    T get1() { return this->back(); } // чтение из 1 стека
    T get2() { return this->front(); }// чтение из 2 стека
    bool empty1() { return N1 == 0; } // проверка на пустоту 1 стека
    bool empty2() { return N2 == 0; } // проверка на пустоту 2 стека
};
int main()
{
    Stack2<int> st;
    for (int i = 1; i < 10; i++)
    {
        st.push1(i);
        st.push2(-i);
    }
 
    while (!st.empty1())
    {
        cout << st.get1() << ' ';
        st.pop1();
    }
    cout << endl;
    while (!st.empty2())
    {
        cout << st.get2() << ' ';
        st.pop2();
    }
    cout << endl;
    cin.get();
    return 0;
}
0
29.03.2022, 08:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2022, 08:30
Помогаю со студенческими работами здесь

Задан указатель P1 на вершину непустого стека. Создать два новых стека
Добрый вечер, у меня возникла проблемка с такой программкой. Вывести в компонент Label. ...

Из одного стека, хранящего символы, создать два новых стека
Из одного стека, хранящего символы, создать два новых стека: один с латинскими буквами, удвоив...

Из одного стека, хранящего символы, создать два новых стека
Из одного стека, хранящего символы, создать два новых стека: один с латинскими буквами, удвоив...

Класс "Динамический массив", переполнение стека
Проблема заключается в переполнение стека, как грамотно присвоить указателю значение нового...

Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями
Дан указатель head1 на вершину непустого стека. Создать два новых стека, переместив в первый из них...

Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями
Дан указатель P1 на вершину непустого стека. Создать два новых стека, переместив в первый из них...


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

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

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