Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
#1

Стек - C++

09.09.2012, 12:51. Просмотров 495. Ответов 5
Метки нет (Все метки)

Здравствуйте,помогите найти понятную реализую кода стека с объяснениями.заранее благодарю

Добавлено через 27 секунд
Не STL
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2012, 12:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек (C++):

Используя стек, описать функцию проверяющую, является ли стек пустым - C++
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include <iostream> #include <stdlib.h> ...

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Стек - C++
#include "stdafx.h" #include <iostream> using namespace std; class Stack_mass { public: int *data; int max_count,...

5
TopLoader
42 / 42 / 4
Регистрация: 10.12.2011
Сообщений: 128
09.09.2012, 15:06 #2
yuliyayuliya28, вот класс стека символов. При желании он легко изменяется и для других данных:
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
// Класс стека символов.
#include <iostream>
#include <windows.h>
using namespace std;
 
const int maxSsize = 100;
 
class Stack {
        char q[maxSsize];           // массив для хранения стека
        int size;                   // макс. число элементов, которые могут находится в стеке
        int loc;                    // индексы "положить" и "взять"
    public:
        
        // Конструктор очереди конкретной длины.
        Stack(int len) {
            if(len > maxSsize)
                len = maxSsize;
            else if(len<=0)
                len = 1;
            
            size = len;
            loc = 0;
        }
        
        void put(char ch) {
            if(loc==size) {
                cout << " -- Стек полон.\n";
                return;
            }
            
            q[loc] = ch;
            loc++;  
        }
        
        char get() {
            if(loc==0) {
                cout << " -- Стек пуст.\n";
                return 0;
            }
            
            loc--;
            return q[loc];
        }
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Russian");
    
    Stack bigS(100);
    Stack smallS(4);
    char ch;
    int i;
    
    cout << "Используем bigS для хранения латинского алфавита.\n";
    // поместим в bigS буквы алфавита
    for(i=0; i<26; i++)
        bigS.put('A' + i);
    
    // извлечем и выведем на экран элементы из bigQ
    cout << "Содержимое bigQ: ";
    for(i=0; i<26; i++) {
        ch = bigS.get();
        if(ch!=0)
            cout << ch;
    }
}
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
09.09.2012, 15:38 #3
Думаю, что лучше реализовать стек не на массиве, а на списке
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.09.2012, 16:36 #4
(Канонический) стек не поддерживает вставки/удаления элементов из середины, а значит, основное преимущество связного списка не используется.
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.09.2012, 16:48 #5
~OhMyGodSoLong~, имеется в виду, с использованием динамической памяти.
Да, я тоже за это.
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
09.09.2012, 17:22 #6
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
#include <iostream>
#include <string>
#include <stdexcept>
 
template <typename T>
class Stack
{
public:
    typedef T value_type;
    Stack() : siz(0), cap(0) // конструктор
    {
        std::size_t initCap(2);
        p = new value_type[initCap];
        cap = initCap;
    }
    Stack(Stack const& st) : siz(0), cap(0) // конструктор копии
    {
        p = new value_type[st.cap];
        cap = st.cap;
        for(std::size_t i = 0; i < st.siz; ++i)
        {
            p[i] = st.p[i];
        }
        siz = st.siz;
    }
    Stack& operator=(Stack st)
    {
        Swap(st);
        return *this;
    }
    ~Stack()
    {
        delete[] p;
        p = 0;
    }
    void push(value_type const& val)
    {
        if(siz == cap) Deallocate();
        p[siz] = val;
        ++siz;
    }
    void pop()
    {
        if(siz)
        {
            (p + siz - 1)->~value_type();
            --siz;
        }
    }
    value_type& top()
    {
        if(siz) return p[siz - 1];
        else throw std::out_of_range("0 == siz");
    }
    value_type const& top() const
    {
        if(siz) return p[siz - 1];
        else throw std::out_of_range("0 == siz");
    }
    std::size_t size() const
    {
        return siz;
    }
    bool empty() const
    {
        return !siz;
    }
private:
    value_type* p;
    std::size_t siz, cap; // число элементов и вместимость
    void Swap(Stack& st) // используется в операторе присваивания
    {
        delete[] p;
        p = st.p;
        st.p = 0;
        siz = st.siz;
        cap = st.cap;
    }
    void Deallocate() // увеличивает вместимость стека в два раза если стек заполнен
    {
        std::size_t newCap = 2 * cap;
        value_type* pt = new value_type[newCap];
        for(std::size_t i = 0; i < siz; ++i)
        {
            pt[i] = p[i];
        }
        cap = newCap;
        delete[] p;
        p = pt;
        pt = 0;
    }
};
 
int main()
{
    Stack<std::string> st, st1;
    st.push("zero");
    st.push("temporary string");
    st.top() = "first string";
    st1 = st;
    st1.push("secong string");
    for(std::size_t i = 0; !st1.empty(); ++ i)
    {
        std::cout << "\nst1.size() is " << st1.size() << std::endl;
        std::cout << st1.top() << '\n';
        st1.pop();
    }
    return 0;
}
0
09.09.2012, 17:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2012, 17:22
Привет! Вот еще темы с ответами:

Стек - C++
Уважаемые теоретики по С++ подскажите, пожалуйста, как граммотно называются в Стеке самое нижнее и самое верхнее значения. Заранее спасибо.

Стек! - C++
Реализуйте структуру данных &quot;стек&quot;. Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные...

Стек - C++
Реализовать с использованием массива стек (первый пришел, последний ушел), для чего организовать добавление, удаление элементов в массив и...

Стек - C++
Здравствуйте. У меня такая проблема: Разработать функцию, которая по одному стеку строит два новых: Stack1 из положительных элементов и...


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

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

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