Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.51/47: Рейтинг темы: голосов - 47, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
1

Стек на основе статического массива

18.11.2012, 11:03. Просмотров 8544. Ответов 6
Метки нет (Все метки)

Здравствуйте!

Помогите пожалуйста выполнить задание.
Сама уже весь форум облазила и нужного не нашла.

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

Создать стек целых чисел на основе статического массива.
Создать стек целых чисел на основе статического массива. Реализовать методы : Добавить элемент,...

Стек записи на основе статического массива типа запись
Добрый вечер! Помогите пожалуйста выполнить задание: Создать стек записи Спортсмен на основе...

Стек на основе статического массива: вставить число, учитывая сортировку
всем привет. помогите решить проблему с методом pushOrder(). Его суть в том, что бы вставить число...

Стек на базе статического массива
Здравствуйте помогите, верней напишите за меня пожалуйста стек на базе статического массива....

6
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
18.11.2012, 16:47 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <cstddef>
#include <string>
 
class Teacher
{
    public:
        Teacher() {}
        Teacher(std::string name, std::string surname):
            _name(name), _surname(surname) {}
        void set(std::string name, std::string surname)
        {
            _name = name;
            _surname = surname;
        }
        friend std::ostream& operator<< (std::ostream &output, const Teacher &t)
        {
            output<< "Name: "<< t._name<< std::endl
                  << "Surname: "<< t._surname<< std::endl;
            return output;
        }
    private:
        std::string _name, _surname;
};
 
 
class MyStack
{
    public:
        MyStack(): counter(0) {}
        void push(const Teacher &el)
        {
            if (counter < N) t[counter++] = el;
        }
        void pop()
        {
            if (counter > 0) counter--;
        }
        const std::size_t size() const {return counter; }
        bool empty() {return counter == 0; }
        const Teacher& top() const
        {
            if (counter > 0) return t[counter - 1];
        }
    private:
        enum {N = 10 };
        Teacher t[N];
        std::size_t counter;
};
 
 
 
 
int main()
{
    MyStack s;
    s.push (Teacher ("Ivan", "Petrov"));
    s.push (Teacher ("Vladimir", "Voronov"));
    while (!s.empty())
    {
        std::cout<< s.top()<< std::endl;
        s.pop();
    }
    return 0;
}
2
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
18.11.2012, 19:34  [ТС] 3
Осталось: Реализовать методы : Добавить элемент, удалить элемент, вершина стека
0
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
18.11.2012, 19:37 4
Вот только сегодня доделал... одинаковые задания

PHP
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#define MAX 15
 
using namespace std;
 
char *stack[MAX]; // Ìàññèâ äëÿ ñòåêà
int tos=0; // Äëÿ âåðøèíû ñòåêà
 
void push(char *i) // Ôóíêöèÿ äîáàâëåíèÿ ýëåìåòà â ñòýê
{
    if(tos >= MAX) // Ïðîâåðêà íà çàïîëíåííîñòü ñòåêà
    {
        cout << "Ñòåê ïîëîí!" << endl;
        return;
    }
    strcpy(stack[tos],i); // Çàïèñûâàåì ñòðîêó â ñòýê
    tos = tos + 1; // Óâåëè÷èâàåì âåðøèíó ñòýêà
}
 
int size() // Äëÿ îïðåäåëåíèÿ ðàçìåðà ñòåêà
{
    if (tos >= 0) return tos;// Åñëè áîëüøå íóëÿ, òî âîçâðàùàåì òåêóùåå çíà÷åíèå âåðøèíû ñòýêà
    else return 0; // èíà÷å âîçâðàùàåì íîëü
}
 
char *pop(void) // Ôóíêöèÿ âûòàñêèâàíèÿ ýëåìåíòà èç ãîëîâû
{
    char *str = new char[30]; // Áóôôåð
    tos = tos - 1; // Ñäâèãàåìñÿ îò ãîëîâû âíèç
    if(tos < 0) // Åñëè âåðøèíà ìåíüøå íóëÿ, òî ñòýê ïóñòîé
    {
        cout << "Ñòåê ïóñò!" << endl;
        return 0;
    }
    strcpy(str, stack[tos]); //èíà÷å â áóôôåð ïîìåøàåì òåêóùåå çíà÷åíèå âåðøèíû
    return str; // âåçâðàùàåì ýòî çíà÷åíèå
}
 
void delet(char *element) // Ôóíêöèÿ óäàëåíèÿ
{
    int razmer = size(); // Ïîëó÷àåì ðàçìåðíîñòü ñòåêà
    char *buf[MAX]; // Äëÿ áóôôåðà, èñ÷ïîëüçóåòñÿ ïðè óäàëåíèè
    for(int i = 0;i<MAX;i++) // ÂÛäåëåíèå ïàìÿòè
    {
        buf[i] = new char[30];
    }
    int c = 0; // Ñ÷åò÷èêè
    int ravn = 0;
    for(int i = 0;i<=size();i++) // Öèêë äëÿ óäàëåíèÿ
    {
        /*Ïðîâåðÿåì,åñëè íå ðàâíû ýëåìåíò èç
        ñòåêà è ýëåìåíò ââåäåäíûé ñ êëàâèàòóðû,
        òî êîïèðóåì â áóôôåð
        óâåëè÷èâàåì ñ÷åò÷èê
        è óäàëÿåì ïîëíîñòüþ äàííóþ ÿ÷åêó èç ñòåêà*/
        if (strcmp(element,stack[i])!=0)
        {
            strcpy(buf[c],stack[i]);
            c = c + 1;
            delete stack[i];
        }
        else //èíà÷å ïðîñòî óäàëÿåì ïîëíóñòüþ ÿ÷åéêó èç ñòåêà
        {
            delete stack[i];
            ravn = ravn + 1;
        }
    }
    tos=0;
    /*Âûäåëÿåì ïàìÿòü äëÿ ñòåêà, òàê êàê îíà áûëà
    óäàëåíà
    è êëàäåì â ñòåê çíà÷åíèÿ*/
    for (int i=0;i<=(razmer-ravn);i++)
    {
        stack[i] = new char[30];
        push(buf[i]);
    }
}
 
int main() // Îcíîâíîå òåëî ïðîãðàììû
{
    system("chcp 1251");
    setlocale(0, "rus");
    
    for (int i = 0;i<MAX;i++) // Âûäåëåíèå ïïàìÿòè äëÿ ýëåìåíòîâ ñòýê
    {
        stack[i] = new char[30];
    }
    char *Element = new char[30]; // Äëÿ ââîäà ýëåìåíòà äëÿ óäàëåíèÿ
    
    cout << "Ââîä ýëåìåíòîâ" << endl;
    
    cout << "Èìÿ: ";
    cin >> Element;
    push(Element);
    cout << "Âèä ñïîðòà: ";
    cin >> Element;
    push(Element);
    cout << "Ôàêóëüòåò: ";
    cin >> Element;
    push(Element);
    cout << "Ñïåöèàëüíîñòü: ";
    cin >> Element;
    push(Element);
    cout << "Âîçðàñò: ";
    cin >> Element;
    push(Element);
    
    cout << "Âåðøèíà ñòåêà: " << pop() << endl; // Ââîä ýëåìåíòà äëÿ óäàëåíèÿ
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): ";
    char *ItemToDelete = new char[30];
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Âåðøèíà ñòåêà: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): ";
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Âåðøèíà ñòåêà: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): ";
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Âåðøèíà ñòåêà: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): ";
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout <<"Âåðøèíà ñòåêà: " << pop() << endl << endl; // Ïå÷àòü òåêóùåé âåðøèíû ñòåêà
    cout << "Êàêîé ýëåìåíò óäàëèòü? (âïèøèòå åãî): ";
    cin >> ItemToDelete;
    delet(ItemToDelete); // Óäàëåíèå ýëåìåíòà
    cout << pop();
    
    system("PAUSE");
}
Думаю остальное сами поменяете под себя.
2
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
18.11.2012, 19:38 5
Цитата Сообщение от OzyRus Посмотреть сообщение
Осталось: Реализовать методы : Добавить элемент, удалить элемент, вершина стека
Так а у меня что там написано: добавить - push(), удалить - pop(), вершина - top(), + как бонус еще size() - размер и empty() - проверка на пустоту
1
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
18.11.2012, 19:44  [ТС] 6
Прошу прощения! Все как надо, только чутку переделать чтоб все подписано было (препод любит докопаться).
0
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
18.11.2012, 20:10 7
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
#include <iostream>
#include <cstddef>
#include <string>
 
class Teacher // описываем класс Teacher
{
    public:
        Teacher() {} // конструктор без параметров
        Teacher(std::string name, std::string surname): // аргументированный конструктор, принимает в качестве параметров две строки типа std::string, имя и фамилию
            _name(name), _surname(surname) {} // использует список инициализации
        void set(std::string name, std::string surname) // метод set, меняет свойства класса
        {
            _name = name;
            _surname = surname;
        }
        friend std::ostream& operator<< (std::ostream &output, const Teacher &t) // дружественная функция вывода в потом ostream. Перегружаем оператор <<
        {
            output<< "Name: "<< t._name<< std::endl // помещаем в поток переменные
                  << "Surname: "<< t._surname<< std::endl;
            return output; // вовзращает ссылку на поток std::ostream
        }
    private: // модификатор доступа
        std::string _name, _surname; // свойства класса
};
 
 
class MyStack
{
    public:
        MyStack(): counter(0) {} // неаргументированный конструктор. Инициализирует свойство counter нулем.
        void push(const Teacher &el) // метод push (вставка элемента). принимает в качестве параметра константную ссылку на объект класса Teacher
        {
            if (counter < N) t[counter++] = el; // если счетчик counter меньше N, добавляем элемент (элемент массива t с индексом counter становится равным объекту из параметра), увеличиваем счетчик на 1
        }
        void pop() // функция удаления из вершины
        {
            if (counter > 0) counter--; // еслисчетчик больше 0, то уменьшаем его на 1
        }
        const std::size_t size() const {return counter; } // возвращаем counter (количество элементов в стеке)
        bool empty() {return counter == 0; } // возвращает истину, если количество эл-тов равно 0, иначе ложь
        const Teacher& top() const // возвращает верхний элемент стека (элемент массива с индексом, равным количеству элементов - 1 (т.к. индексация начинается с 0)
        {
            if (counter > 0) return t[counter - 1]; // если счетчик больше 0, то возвращаем элемент
        }
    private:
        enum {N = 10 }; // перечисление, объявляем размер массива N, равной 10
        Teacher t[N]; // создаем массив объектов класса Teacher размерностью N
        std::size_t counter; // счетчик
};
 
 
 
 
int main()
{
    MyStack s; // создаем объект класса MyStack
    s.push (Teacher ("Ivan", "Petrov")); // добавляем в стек объект класса Teacher, образованный аргументированным конструктором, принимающим в качестве параметров имя и фамилию
    s.push (Teacher ("Vladimir", "Voronov")); // аналагично
    while (!s.empty()) // пока стек не пуст
    {
        std::cout<< s.top()<< std::endl; // выводим вершину стека на экран
        s.pop(); // удаляем верхний элемент стека
    }
    return 0; // завершилось без проблем
}
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2012, 20:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Очередь на основе статического массива
в очередь с экрана вводятся строки,когда вводится строка end,элементы извлекаются из очереди и...

Очередь на основе динамического (статического) массива
Задание следующее: Абстрактный класс (интерфейс) - это у меня очередь Дочерние/производные классы...

Стек на основе массива
Банально: создать, добавить, удалить. Без своих &quot;написаний&quot; никак, дело в том, что впритык не...

Стек на основе динамического массива
Надо написать стек на основе динамического массива. Как выделить память под новый элемент? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.