Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454

Улучшить мою реализация стека на базе массива

01.10.2019, 00:46. Показов 4573. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для реализации задания

Смоделировать стек на базе статического массива по заданию. Переписать основные операции работы со стеком и продемонстрировать их применение при добавлении и удалении элементов из стека. Для реализации этого (если в задании не указано другим способом) задать последовательность из К целых чисел (числа вводить с клавиатуры). Все четные числа добавлять в стек, а каждое нечетное число имеет изымать из стека один элемент. Выводить на экран динамику содержания стека во время обработки заданной последовательности.
Примечание: не работать со стеком как с массивом, а только как с абстрактным типом данных.
*Написать программу для реализации стека с помощью массива data [N], в котором data [0] (а не отдельная переменная) используется, для хранения вершины стека, а остальные элементы массива могут содержать элементы самого стека. После обработки заданной входной последовательности исключить из полученного стека нижний элемент.

я сделал:

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
#include <iostream>
#include <algorithm>
using namespace std;
#define n 5
#define MAX 10
 
class Stack {
private:
    int data[n];
    int size;
 
public:
    Stack() {
        size = -1;
    }
 
    void reverseArray(int arr[], int start, int end)
    {
        while (start < end)
        {
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            start++;
            end--;
        }
    }
 
    void push(int num) {
        int temp = size;
        if (temp + 1 > size)
        reverseArray(data, 0, size);
        size++;
        data[size] = num;
        reverseArray(data, 0, size);
    }
 
    void pop() {
        reverseArray(data, 0, size);
        if (size == 0)
            cout << "Stack is empty!" << endl;
        else {
            size--;
        }
        reverseArray(data, 0, size);
    }
 
    void show() {
        for (int i = 0; i <size + 1; i++)
            cout << data[i] << " ";
        cout << endl;
    }
 
    int top() {
        return data[0];
    }
};
 
int main_4() {
    Stack stack;
    stack.push(10); // 10
    stack.show();
    stack.push(5); //  5 - 10
    stack.show();
    stack.pop(); // 10
    stack.show();
    stack.push(14); // 14 - 10
    stack.show();
    stack.push(90); // 90 - 14 -10
    stack.show();
    stack.push(89); // 89 - 90 - 14 - 10
    stack.show();
    stack.push(4); // 4 - 89 - 90 - 14 - 10
    stack.show();
    stack.pop(); // 89 - 90 - 14 - 10
    stack.show();
    return 0;
}
Не уверен в правильности и эфективности , не могли б вы посмотреть и при возможности улучшить код, заранее спасибо.

Добавлено через 4 часа 6 минут
...
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2019, 00:46
Ответы с готовыми решениями:

Реализация стека с помощью массива
Извиняюсь. Неправильно тему назвал :) Стек – KStack Методы: конструкторы, деструктор; операции: &gt;&gt;, &lt;&lt;, +, +=, =,...

Реализация стека средством динамического массива
///Предоставляет списко-подобные структуры. unit Lists; type ///Базовый класс для всех остальных. TListBase&lt;TValue&gt; =...

Реализация стека целых чисел. Процедура добавления нового элемента, удаление, вывод стека
Попросили написать программку, но, паскаль очень давно не практикую, поэтому прошу тут: Надо написать программу реализации стека целых...

22
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
01.10.2019, 17:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
ладно, вот ваши хотелки:
Уря, спустя 7 часов дискусии я получил готовый код при том что главным моим аргументом было "значение в первом элементе " и "я не понимаю"
Цитата Сообщение от XLAT Посмотреть сообщение
указатель(индекс) на вершину
это не
значение этой вершины.
Ясное дело, эти 7 часов я это и говорил что мне нужно значение а не кол-во элементов.
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
01.10.2019, 17:48  [ТС]
Вот вывод этого кода.
Миниатюры
Улучшить мою реализация стека на базе массива  
0
Just Do It!
 Аватар для XLAT
4223 / 2689 / 656
Регистрация: 23.09.2014
Сообщений: 9,252
Записей в блоге: 3
01.10.2019, 18:26
Лучший ответ Сообщение было отмечено plzvtl как решение

Решение

Цитата Сообщение от plzvtl Посмотреть сообщение
Вот вывод этого кода.
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
template<class T, int AMOUNT_MAX>
class Stack
{   private:
        int Size;
        T   data[AMOUNT_MAX];
 
    public:
        Stack() : Size(0)
        {
        }
 
        T top()
        {   return data[0];
        }
 
        void push(int num)
        {   if(Size <= AMOUNT_MAX)
            {   for(int i = Size; i != 0; --i)
                {   data[i] = data[i-1];
                }
                data[0] = num;
                Size++;
            }
            else 
            {   std::cout << "ERROR push: Stack is full!\n";
            }
        }
        
        void pop()
        {   if(Size != 0)
            {   for(int i = 0; i < Size; ++i)
                {   data[i] = data[i+1];
                }
                Size--;
            }
            else 
            {   std::cout << "ERROR pop: Stack is empiy!\n";
            }
        }
        
        bool empty(){ return Size;}
        int  size (){ return Size;}
        
        void show()
        {   if(Size == 0)
            {   std::cout << "ERROR show: Stack is empty!\n";
            }
            else
            {   for (int i = 0; i < Size; std::cout << data[i++] << " "); 
            }
            std::cout << "\n";
        }
};
 
int main()
{   Stack<int, 10> stack;
 
    stack.push(10); // 10
    stack.show();
    stack.push(5);  // 5  - 10
    stack.show();
    stack.pop ();   // 10
    stack.show();
    stack.push(14); // 14 - 10
    stack.show();
    stack.push(90); // 90 - 14 -10
    stack.show();
    stack.push(89); // 89 - 90 - 14 - 10
    stack.show();
    stack.push(4);  // 4  - 89 - 90 - 14 - 10
    stack.show();
    stack.pop ();   // 89 - 90 - 14 - 10
    stack.show();
    return 0;
}


вы же программист!
могли бы и сами исправить...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2019, 18:26

Копирование стека(требуется улучшить)
Доброго времени суток! Для решения кое-какой задачи мне нужно использовать линкед стек, для уменьшения затрат памяти. Я написал вот такой...

Реализация очереди на базе массива
реализация очереди на базе массива . код С

Реализация списка на базе динамического массива [code review]
using System; namespace MyCollections.Generic { public class List&lt;T&gt; : IPrintable, ICloneableAs&lt;List&lt;T&gt;&gt; { private T content;...

Ускорить/улучшить запрос к базе
Кто может подсказать как улучшить/ускорить запрос к БД MySQL: &lt;?php include 'includes/db.php'; $names = array(); $db =...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru