1 / 1 / 1
Регистрация: 11.02.2015
Сообщений: 83
1

Товарищи программисты, что то тут со стеком не так

21.04.2017, 08:23. Показов 1601. Ответов 4
Метки нет (Все метки)

Нужно Создать стек, содержащий целые числа. Вставить нулевой элемент после последнего четного элемента. Порядок вывода элементов результирующего стека на экран должен совпадать с порядком ввода элементов.
Например, если введены 1 1 2 3 4 5 1, то результат должен быть 1 1 2 3 4 0 5 1


Есть вот такая заготовка:
C++ (Qt)
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
#include<iostream>
using namespace std;
 
struct stack{
        int inf;
        stack *next;
};
 
void push(stack *&h, int x){//вставка
        stack *r = new stack;
 
 
        r->inf = x;
        r->next = h;
 
        h = r;
}
 
int pop (stack *&h){ //удаление
        int i = h->inf;
         stack *r = h;
        h = h->next;
        delete r;
        return i;
}
 
void reverse(stack *&h){ //"обращение"стека
        stack *head1 = NULL; //инициализация буферного стека
        while (h) //пока стек не пуст
        push(head1, pop(h)); //переписываем из одного стека в другой
        h = head1; //переобозначаем указатели
}
 
stack *result (stack *&h){
        stack *res = NULL; //инициализация
        stack *h1 = NULL;
        while(h){
                int x = pop(h); //удаляем первый элемент
                push(res, x); //записываем в результат
                while(h){
                        int y = pop(h); //удаляем элемент из стека
                         if (x != y) push(h1, y); //записываем в новый стек
                }
                reverse(h1); //переворачиваем стек
                h = h1; //переобозначаем указатели
                h1 = NULL;
        }
        reverse(res); //переворачиваем результирующий стек
        return res;
}
 
int main(){
        int n;
        cout << " n = ";
        cin >> n;
        stack *head = NULL; //инициализация
        int x;
        for (int i = 0; i < n; i++){ //создаем стек
                cin >> x;
                push(head, x);
        }
 
        reverse(head); //переворачиваем стек
        stack *res = result(head); //результат
        while(res)
        cout << pop(res) << " "; //выводим на экран
        cout << endl;
        return 0;
}
Заранее спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2017, 08:23
Ответы с готовыми решениями:

Товарищи программисты что-то у меня не правильно в решении задачи (.(x+a)^2+a)^2+.+a)^2)+a)^2+a
((...((x+a)^2+a)^2+...+a)^2)+a)^2+a есть наброски но я тупой ( #include &lt;stdio.h&gt; #include...

Что не так с cout << или стеком?
Привет. Вопрос к спецам, сам сломал голову. Есть маленький класс-стек, кидаем туда элементы 1,2,3...

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

Проверка правильности расстановки скобок со стеком, что не так?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include&lt;locale.h&gt; int main() { ...

4
7275 / 6220 / 2833
Регистрация: 14.04.2014
Сообщений: 26,871
21.04.2017, 08:36 2
Для чего result()? Где вставка?
0
1 / 1 / 1
Регистрация: 11.02.2015
Сообщений: 83
21.04.2017, 08:37  [ТС] 3
Нет ее, я хотел бы что мне помогли ее реализовать...
0
1270 / 1027 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.04.2017, 08:54 4
Лучший ответ Сообщение было отмечено bartle как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
stack *s1, *s2 = nullptr;
 
// ... заполняем стек s ...
 
bool firstEven = true;
 
while (s1)
{
  int x = pop(s1);
  if (firstEven && x%2 == 0) {
    push(s2, 0);
    firstEven = false;
  }
  push(s2, x);
}
 
// выводим содержимое s2
while (s2)
{
  std::cout << pop(s2) << " ";
}
1
1 / 1 / 1
Регистрация: 11.02.2015
Сообщений: 83
28.04.2017, 20:11  [ТС] 5
likehood, Спасибо большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2017, 20:11
Помогаю со студенческими работами здесь

Товарищи, тут программу надо написать)
Вообщем, сижу уже неделю с лишним, как бы это смешно не казалось, но не могу написать программу -...

Что-то тут не так?
Выдает ошибку System.NullReferenceException: &quot;Ссылка на объект не указывает на экземпляр объекта.&quot;...

Что тут не так?
Суть программы: Из файла берется матрица любой размерности, потом она слаживается и записывается в...

Что тут не так?
Не понимаю - почему программа не работает... Если все string Заменить на массивы char, то всё...

Что тут не так?
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; bool is_it(char *); int main(){...

что тут не так
//#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;conio.h&gt; void main() {...


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

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

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