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

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

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

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

Смоделировать стек на базе статического массива по заданию. Переписать основные операции работы со стеком и продемонстрировать их применение при добавлении и удалении элементов из стека. Для реализации этого (если в задании не указано другим способом) задать последовательность из К целых чисел (числа вводить с клавиатуры). Все четные числа добавлять в стек, а каждое нечетное число имеет изымать из стека один элемент. Выводить на экран динамику содержания стека во время обработки заданной последовательности.
Примечание: не работать со стеком как с массивом, а только как с абстрактным типом данных.
*Написать программу для реализации стека с помощью массива 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2019, 00:46
Ответы с готовыми решениями:

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

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

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

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

22
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
01.10.2019, 17:41  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
ладно, вот ваши хотелки:
Уря, спустя 7 часов дискусии я получил готовый код при том что главным моим аргументом было "значение в первом элементе " и "я не понимаю"
Цитата Сообщение от XLAT Посмотреть сообщение
указатель(индекс) на вершину
это не
значение этой вершины.
Ясное дело, эти 7 часов я это и говорил что мне нужно значение а не кол-во элементов.
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
01.10.2019, 17:48  [ТС] 22
Вот вывод этого кода.
Миниатюры
Улучшить мою реализация стека на базе массива  
0
Just Do It!
3841 / 2288 / 636
Регистрация: 23.09.2014
Сообщений: 7,078
Записей в блоге: 2
01.10.2019, 18:26 23
Лучший ответ Сообщение было отмечено 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
01.10.2019, 18:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2019, 18:26
Помогаю со студенческими работами здесь

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

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

Ускорить/улучшить запрос к базе
Кто может подсказать как улучшить/ускорить запрос к БД MySQL: &lt;?php include...


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

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