Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342

вопрос по стеках (stack)

06.11.2011, 01:12. Показов 3673. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Реализовать стек с помощью массива data [N], в котором последний элемент массива, а не отдельная переменная, используеться для хранения указателя вершины стека, а остальные элементы массива могут содержать элементы самого стека. После обработки всей заданной входной последовательности превратить полученный стек так, чтобы он не содержал одинаковых элементов, идущих подряд (т.е. вместо каждой последовательности одинаковых элементов должен остаться только один элемент, например, из стека с содержанием 22230115555 надо получить стек с содержанием 23 015).

кто может, помогите по написанию кода, я вот придумал такой алгоритм, но в причине отсуствие синтаксисчних навиков, мне тяжело его реализировать:
например наш стек содержит такие елементи 22230115555, помня что в стеку елементи идут с права на лево, тоесть так:
5
5
5
5
1
..
ми будем перемещать елементи в другой стек, при умове, что если встретиться елемент, которий равний предидущему, то его ми перекидивать не будем, так ми получим стек с такими елементами
5
1
0
3
2
дальше ми опять перекинем назад, чтоб получился стек с елементами:
2
3
0
1
5
вот и все, ето мой алгоритм, кто хорошо знает синтаксис, наберите плс, буду благодарен, в доказ того что я не тупой, дам то что набрал сам, тоесть проверял роботу стека:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stack>
#include <iostream>
using namespace std;
int main()
{
setlocale (LC_ALL, "");
int i = 0;
int value;
const int x_size = 11;
stack< int > intStack;
intStack.empty();
int x[x_size]={4, 4, 4, 4, 5, 5, 2, 2, 2, 1, 1}; // заповнення стеку
for ( ; i < x_size; ++i )
    intStack.push( i[ x ] );
 
intStack.pop();
value = intStack.size();
 
 
cout << "результат " << value << endl;
}
Наперед спасибо, я понимаю что очень многа текста

Добавлено через 1 час 49 минут
неужели никто не знает стек??????
не могу в такое поверить...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2011, 01:12
Ответы с готовыми решениями:

[bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>'
Возникает ошибка File1.cpp(19): E2316 'Stack&lt;T&gt;::Stack()' is not a member of 'Stack&lt;T&gt;' #pragma hdrstop #pragma argsused ...

Есть ли связь между STL-stack и stack - высокопроизводительная память?
Куча источников, как всегда много отсебятины, в общем я запутался...

error C2440: 'return' : cannot convert from 'stack<X>' to 'stack<X> *'
Пишу класс PersonKeeper, в нем readPersons(должен считывать информацию о людях из входного потока (файла), создавать на основе этой...

17
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.11.2011, 01:18

Не по теме:

Хм. Мне стало скучно, и я реализовал свой стек с блекджек... Ну вы поняли.


Алгоритм в самом конце, в функции main. Вроде должен работать. Перемещать из второго стека в главный не стал, если надо - допилите, напильник прилагается.
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
#include <iostream>
#include <iomanip>
 
const int STEP = 10;
 
template <typename T>
class Stack
{
public:
    Stack();
    Stack(int); 
    ~Stack();
    void push(T);
    T pop();
    int getSize();
    
private:
    T *stack;
    int size;
    int count;
};
 
template <typename T>
Stack<T>::Stack() : size(STEP), count(0)
{
    stack = new T [size];
}
 
template <typename T>
Stack<T>::Stack(int n) : size(n), count(0)
{
    stack = new T [size];
}
 
template <typename T>
Stack<T>::~Stack()
{
    delete[] stack;
}
 
template <typename T>
void Stack<T>::push(T num)
{
    if(++count != size)
        stack[count - 1] = num;
    else
    {
        T *buf = new T [size + STEP];
        for(int i = 0; i < size; ++i)
            buf[i] = stack[i];
        delete[] stack;
        stack = new T [size + STEP];
        for(int i = 0; i < size; ++i)
            stack[i] = buf[i];
        delete[] buf;
        size += STEP;
        stack[count - 1] = num;
    }
}
 
template <typename T>
T Stack<T>::pop()
{
    return stack[--count];
}
 
template <typename T>
int Stack<T>::getSize()
{
    return count;
}
 
int main()
{
    Stack<float> stack;
    float tmp;
    while(std::cin >> tmp)
        stack.push(tmp);
    if(stack.getSize() == 0)
        return 0;
    
    Stack<float> buf;
    float a, b;
    while(stack.getSize() > 0)
    {
        if(stack.getSize() == 1)
        {
            buf.push(stack.pop());
            break;
        }
        
        a = stack.pop();
        do
            b = stack.pop();
        while((stack.getSize() > 0) && (a == b));
        
        buf.push(a);
        if(a != b)
            stack.push(b);
    }
 
    //Begin of напильник. Заменить им вывод стека.
    //while(buf.getSize() > 0)
    //    stack.push(buf.pop());
    //while(stack.getSize() > 0)
    //    std::cout << stack.pop() << std::setw(6);
    //End of напильник
    
    while(buf.getSize() > 0)
        std::cout << buf.pop() << std::setw(6);
    
    return 0;
}
}
0
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
06.11.2011, 01:38  [ТС]
спасибо, щас посмотрю...
но я забил написать коечто, мммммм, не нужно использовать размер (size), тоесть я должен сделать, не используя его
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.11.2011, 01:46
Получится немного корявее, но нет ничего невозможного. Хотя, укусить себя за лоб будет сложновато... Но речь не о том.
Либо нужно попросить пользователя ввести количество чисел, либо отслеживать количество введенных чисел непосредственно при вводе. Затем, везде где будет использоваться push увеличивать size на единицу, а там где pop уменьшать. Разумеется, это должны быть 2 различные переменные для stack и buf(в моем случае).
0
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
06.11.2011, 01:52  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Получится немного корявее, но нет ничего невозможного. Хотя, укусить себя за лоб будет сложновато... Но речь не о том.
Либо нужно попросить пользователя ввести количество чисел, либо отслеживать количество введенных чисел непосредственно при вводе. Затем, везде где будет использоваться push увеличивать size на единицу, а там где pop уменьшать. Разумеется, это должны быть 2 различные переменные для stack и buf(в моем случае).
а если использовать так:
берем самий верхний елемент и переносим его в другой стек, и сразу проверяем, не пустой ли наш основной стек, если он не пустой, то повторяем дальше
ну типу чтото data[used];
data [used - 1];
или не поканает?
и кста, можно делать ли подобние операции со стеками без использование шаблона?
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.11.2011, 11:04
Цитата Сообщение от zewer Посмотреть сообщение
берем самий верхний елемент и переносим его в другой стек, и сразу проверяем, не пустой ли наш основной стек, если он не пустой, то повторяем дальше
ну типу чтото data[used];
data [used - 1];
Не догнал, если честно. Можете непосредственно на коде показать?
0
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
06.11.2011, 22:36  [ТС]
можно ли сделать стек без использование шаблонов, а только на основе статического массива?????
просто в задание написано сделать на основе статического массива, дайте ответ да или нет, если без шаблона то походу сделаю норм
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
06.11.2011, 23:09
можно ли сделать стек без использование шаблонов, а только на основе статического массива?????
Разумеется, только размер стека будет ограничен.
Я не понял касательно алгоритма.
а если использовать так:
берем самий верхний елемент и переносим его в другой стек, и сразу проверяем, не пустой ли наш основной стек, если он не пустой, то повторяем дальше
ну типу чтото data[used];
data [used - 1];
или не поканает?
И алгоритм ли это вообще?
0
 Аватар для zewer
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
06.11.2011, 23:50  [ТС]
как раз все прекрасно, спасибо
на счет data [used] , я просто нарил такую фигню - походу ето бред
а на счет алгоритма без использование size, то походу может подойти такой:
после каждого переноса елемента делать проверку на то, не пустой ли стек, если не пустой, продолжать перенос, а если пустой - то остановить перенос
как то так, вроде и реализовать не сложно
0
 Аватар для hepr
63 / 35 / 13
Регистрация: 21.10.2010
Сообщений: 538
07.11.2011, 17:22
Блин, не туда скинул))
0
07.11.2011, 17:43

Не по теме:

Как перебрать все элементы стэка? Итераторы ведь не поддерживаются.

0
Заблокирован
07.11.2011, 17:46
стек лифо - ласт инпут фёст аут, как бы не подразумевает произвольного доступа, зачем ему итератор
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
07.11.2011, 17:56
Цитата Сообщение от LosAngeles Посмотреть сообщение
стек лифо - ласт инпут фёст аут, как бы не подразумевает произвольного доступа, зачем ему итератор
Я хочу узнать как просмотреть все элементы, не удаляя их. Такое вот задание в ВУЗе дали.
0
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
07.11.2011, 18:03
допустим,массив .От 0 до длина -1 .Итерация с помощью for,while ...if
for(int i =0;i<x_size ;i++){cout<<x[i];}

а добавлять / удалять элементы - с конца.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
07.11.2011, 18:42
Цитата Сообщение от zek921 Посмотреть сообщение
допустим,массив .От 0 до длина -1 .Итерация с помощью for,while ...if
for(int i =0;i<x_size ;i++){cout<<x[i];}
а добавлять / удалять элементы - с конца.
А ничего, что стэк не поддерживает операцию индексации?
0
Заблокирован
07.11.2011, 18:49
Цитата Сообщение от Chelioss Посмотреть сообщение
А ничего, что стэк не поддерживает операцию индексации?
значит снова возвращаемся к итераторам, или пишем сишной структуркой, там инкапсуляции нет, можешь просматривать стек хоть наискосок
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
07.11.2011, 19:00
Цитата Сообщение от LosAngeles Посмотреть сообщение
значит снова возвращаемся к итераторам
Вы же сами сказали, что итераторы не поддерживаются.
Цитата Сообщение от LosAngeles Посмотреть сообщение
или пишем сишной структуркой, там инкапсуляции нет, можешь просматривать стек хоть наискосок
В смысле самому что ли стэк реализовать?

Загвоздка в том, что в задании, которое дали в ВУЗе, надо сделать собственный стэк и использовать в программе свой и стандартный стэк. Со своим как раз проблемы нет.
0
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
07.11.2011, 19:14
ой ,та но здоровье ,вытягиваем содержимое поштучно куда - нибудь ,выполняем какие - нибудь действия ,запихиваем обратно (учитываем ,что берем с конца ,получим последовательность обратную начальной). Я понимаю ,правила и всё такое ,но в в реализации ,всё-же , возможность доступа произвольному (ReadOnly) элемента стека очень полезна .Мне помогала .Когда нужно работать с объектом как со стеком я выполняю пуш и поп ,больше от стека ,как хранилища особым образом организованного ,ничего и не требуется .Хз ,не очень выразил свою мысль ,наверное ,сорри .

Добавлено через 1 минуту
C++
1
2
int len = stack.Length;
for(int i =0;i<len;i++){cout<<stack.Pop();}

не удаляя - вытащенный элемент кидаем в другой стек .
Потом заполняем первый на основе данных нашего вспомогательного

Добавлено через 3 минуты
Натупил ,забыл что речь идет о стандартной реализации стека ,думал о стеках в общем и своем варианте реализации


length to getLen как заменить думаю и так понятно
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2011, 19:14
Помогаю со студенческими работами здесь

Указатели в стеках
Есть структура стека есть две функции - добавления элемента в стек и удаления всего стека ЗАДАЧА - нужно сделать копию первого стека, с...

Очередь на двух стеках
Очередь на двух стеках Входные данные: Последовательность запросов popFront(), pushBack(), max(). Выходные данные: Для каждого запроса...

Очередь queue на двух стеках. C C++ в C#
Может кто перевести на С#? #include &lt;iostream&gt; using std::cout; using std::endl; #include &lt;stack&gt; using std::stack; class...

Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun"
Не могу понять почему значение ChoiceOfPlayer меняется и почему NumberOfRow и NumberOfColumn всегда последние значение цикла. Помогите...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru