Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157

Стеки

03.11.2012, 15:15. Показов 4746. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовать программу, в которой будут использоваться стеки (магазинный и кольцевой) и очередь. В самих программах реализовать такие функции:
заполнение стека(очереди) вручную, удаление и добавление элементов, вывод содержимого на экран, очистка стека (очереди).
Смотрел и читал на форуме о стеках но не понял на чем их применять или они сами по себе?
Можете на коде объяснить своими словами как работает стек?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2012, 15:15
Ответы с готовыми решениями:

Стеки С++
Добрый вечер.Задание следующие нужно сделать добавление в стек после елемента L.Дано 2 стека X Y из них добавить верхушку с X в Z до...

Стеки на С!
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавлять...

стеки
Здравствуйте. Я создал шаблон класса стек. Как мне перегрузить операторы -- и += для извлечение и добавление элемента в стек. И нужно...

47
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
03.11.2012, 15:22
Стек - это, такая фигня, в которую первым вошёл, но последним вышел. Т.е. записали мы в него 5 чисел: 1, 2, 3, 4, 5. И нам нужно прочитать 3 элемент. Для этого мы сначала прочитаем цифру 5, потом 4, а потом уже 3.

Очередь - это, такая фигня, где данные записываются всегда в конец очереди, а считываются с начала.
Т.е. записали мы в очередь 5 чисел: 1, 2, 3, 4, 5. Решили записать ещё цифру 6. Очередь после этой операции приобретёт вид 1, 2, 3, 4, 5, 6.
Решили считать 4 элемент из очереди. Сначала считаем цифру 1, потом 2, потом 3, а потом 4.
1
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
03.11.2012, 15:31  [ТС]
Ну на словах все понятно но как эт все написать, то есть самому вводить заполнение стека(очереди) вручную, удаление и добавление элементов, вывод содержимого на экран, очистка стека (очереди).
Да я смотрел примеры но все ровно не получается.
0
26 / 26 / 7
Регистрация: 18.11.2011
Сообщений: 266
03.11.2012, 15:44
Цитата Сообщение от Liberation Посмотреть сообщение
Ну на словах все понятно но как эт все написать, то есть самому вводить заполнение стека(очереди) вручную, удаление и добавление элементов, вывод содержимого на экран, очистка стека (очереди).
а что тут сложного просто структуру объявляеш ьи с ней работаешь
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
03.11.2012, 15:52
Самое простое сделать стек с использованием массива. Как разберёшься, то можно будет попробовать написать стек с использованием односвязных\двусвязных списков.
0
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
03.11.2012, 15:58  [ТС]
Еще вопрос, магазинный это очередь, а кольцевой это двусвязный?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
03.11.2012, 16:04
Цитата Сообщение от Liberation Посмотреть сообщение
а кольцевой это двусвязный?
Это где начальный элемент списка, связан с последним.
1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
03.11.2012, 16:06
Кольцевой это когда дошёл до начала, а следующий элемент последний. Зацикливание.

Магазинный от слова "магазин" от автомата или пулемёта. Думаю, представляете себе, как там патроны вылетают
1
 Аватар для dederkay
46 / 46 / 4
Регистрация: 08.12.2010
Сообщений: 161
03.11.2012, 16:40
вот простая очередь, не шаблонная, делал давно посмотрите если что спрашивайте тут форум добрых людей)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#pragma once
#include <iostream>
using namespace std;
 
class NodeQueue
{
private:
    int lenght;
    struct Node
    {
        char data[256];
        Node* next;
    };
    
    Node* head;
    Node* tail;
public:
    explicit  NodeQueue()
    {
        head = NULL;
        tail = NULL;
        lenght = 0;
    }
    /*NodeQueue(const char &s)
    {
    }*/
    ~NodeQueue()
    {
        while(head)
        {
            tail = head->next;
            delete head;
            head = tail;
        }
    }
    void enqueue(void)
    {
        Node* temp = new Node;
        fflush(stdin);
        printf("Insert queue element: ");                /*temp->data = value;*/
        fgets(temp->data, 256, stdin);
        temp->data[strlen(temp->data) - 1] = '\0';
        
        if(empty())
        {
            head = temp;
            tail = temp;
            lenght++;
            cout<<"Element: \""<<temp->data<<"\" has been added to queue."<<endl;
            return;
        }
        tail->next = temp;
        tail = temp;
        tail->next = NULL;
        cout<<"Element: \""<<temp->data<<"\" has been added to queue."<<endl;
        lenght++;
    }
    void dequeue(void)
    {
        if(empty())
        {
            cout<<"Queue is empty"<<endl;
            return;
        }
        Node* delPtr = head;
        cout<<"Element \""<<head->data<<"\" is deleted from queue"<<endl;
        head = head->next;
        delete delPtr;
        lenght--;
    }
    bool empty()const
    {
        return head == NULL;
    }
    inline int getLenght(void)
    {
        return lenght;
    }
    void clean(void)
    {
        if(empty())
        {
            cout<<" Queue is empty."<<endl;
            return;
        }
        Node* delPtr = head;
        if(head != tail)
        {
            while(head)
            {
                head = head->next;
                delete delPtr;
                delPtr = head;
            }
        }
        head = NULL;
        tail = NULL;
        cout<<" All elements of queue is deleted."<<endl;
        lenght = 0;
    }
    void print(void)const
    {
        if(empty())
        {
            cout<<"Queue is empty"<<endl;
            return;
        }
        
        cout<<"________________________________________________________________________"<<endl;
        if(head == tail)
        {
            cout<<head->data<<endl;
        }
        if(head != tail)
        {
            for(Node* ptr = head; ptr != NULL; ptr = ptr->next)
            {
                    cout<<" "<<ptr->data<<" |";
            }
        }
        cout<<endl;
        cout<<"________________________________________________________________________"<<endl;
        cout<<endl;
    }
    char* operator [](int i)
    {
        if(empty())
        {
            cout<<" Queue is empty"<<endl;
        }
        Node* p = head;
        for(int n = 1; p != tail; p = p->next)
        {
            if(i == n)
            {
                return p->data;
            }
            n++;
        }
    }
    friend int clacCount(void)
    {
        int len = 0;
        return len;
    }
};
Добавлено через 20 минут
вот еще стек, не круговой, но думаю превратить в такой не составит труда?
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
#pragma once
#include <iostream>
using namespace std;
template<class NODETYPE>
class Stack
{
protected:
    int count;//кількість
    struct Node//структура вузол
    {
        NODETYPE data;//дані шаблонного типу
        Node* prev;//покажчик на попередній елемент
        NODETYPE& getData(void)//функція що повертає сслику на дані
        {
            return data;// повертаємо дані
        }
    };
    Node* bottom;//покажчик на вершину стеку
public:
    Stack(void):count(0), bottom(0)//облнуляємо змінні в констукторі
    {
    }
    ~Stack(void)//дестуктор
    {
        clear();//викликаємо функцію очищення
    }
    
    void push(NODETYPE someData)//функція яка добаляє елемент на вершину стеку, приймає на вхід дані
    {
        Node* Temp = new Node;//створюємо новий елемент
        Temp->data = someData;//заповнюємо його дані вхідними даними
        Temp->prev = bottom;//вказуємо що вершина знаходиться перед ним
        bottom = Temp;//тепер вершина і є він
        count++;//інкрементуємо лічильник
    }
    void pop(void)//функція видалення елементу з вершини
    {
        if(!bottom)//у разі коли вершини не існує
        {
            cout<<"Err. Stack is empty."<<endl;//виводимо на екран помилку
            return;//виходимо з функції, не повертаючи значення
        }
        Node* pTemp = bottom->prev;//створюємо новий елемент який зберігає в собі елемент на рівень нижчий вершини
        delete bottom;//видаляємо вершину
        bottom = pTemp;//нова вершина рівна тому елементу
        count--;//декрементуємо лічильник
    }
    void clear(void)//функція очищення
    {
        while(bottom)//циклічно виконуємо доки існую вершина
        {
            Node* delPtr = bottom->prev;//створюємо новий елемент який зберігає в собі елемент на рівень нижчий вершини
            delete bottom;//видаляємо вершину
            bottom = delPtr;//нова вершина рівна тому елементу
        }
        count = 0;//обнуляємо лічильник
        bottom = NULL;//обнуляємо вершину
    }
    NODETYPE getBottomData(void)const//функція що повертає дані з вершини
    {
        return bottom->data;//повертаємо дані вершини
    }
    int rCount(void)const//функція що повертає кількість елементів
    {
        return count;//повертаємо лічильник(поточна кількість)
    }
    friend ostream& operator<<(ostream &o, const Stack &obj)//оператор запису в поток
    {
        if(!obj.bottom)//у разі коли обєкту не існує
        {
            o<<"Err. Stack is empty."<<endl;//записуємо в поток меседж про помилку
            return o;//повертаємо ссилку на поток для того щоб можна було робити так cout<<stack<<"lolwto?";
        }
        o<<"\n";//записуємо в поток перехід на новий рядок
        Node* p = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(; p; p = p->prev)//циклічно перебраємо всі елементи покажчика
        {
            o<<" * "<<p->data<<" * "<<endl;//записуючи в поток виведення дані з зірочками по сторонам і переходами на новий рядок
        }
        o<<endl;//перехід на новий рядок
        return o;
    }
    friend istream& operator>>(istream &i, Stack &obj)//оператор зчитування з потоку
    {
        Node* b = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(; obj.bottom; obj.bottom = obj.bottom->prev)//циклічно перебраємо всі елементи об'єкту
        {
            cout<<"Insert stack data: ";//виводимо на екран "введіть дані"
            i>>obj.bottom->getData();//зчитуємо  потоку дані записуючи їх в дані елементу стеку
        }
        obj.bottom = b;//відновлюємо покажчик на голову
        return i;//повертаємо ссилку на поток
    }
};
все делалось давно так что кто найдет ошибки буду рад, стек шаблонный, и да надеюсь укр комменты не будут дискриминироваться)
1
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
03.11.2012, 18:03  [ТС]
спасибо, правда так много команд и все сразу, а мы не учили в универе стеки и тут все свалилось на голову) буду сидеть вникать, если что напишу)
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
03.11.2012, 18:31
Liberation, в универе не учат каким-то предметам, а дают некий "быстрый старт" для постижения.
0
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
03.11.2012, 20:22  [ТС]
1>------ Построение начато: проект: ko, Конфигурация: Debug Win32 ------
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup
1>c:\users\ganibal012\documents\visual studio 2010\Projects\ko\Debug\ko.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

первый пример ошибку выдает
0
 Аватар для dederkay
46 / 46 / 4
Регистрация: 08.12.2010
Сообщений: 161
04.11.2012, 01:00
Дайте код мейна плз, без кода ответ маловероятен) ну и вот мелкий примерчик)

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 "queue.h"
#include <conio.h>
 
void menu(void)
{
    cout<<"__________________________________________________________________"<<endl;
    cout<<"__________________________________________________________________"<<endl;
    cout<<"                          Varinat 4    "<<endl;
    cout<<"  1 - add element to queue;    2 - delete element from queue; "<<endl;
    cout<<"  3 - print queue elements;    4 - delete all queue elements;"<<endl;
    cout<<"  5 - get lenght of queue;     6 - get element by number;"<<endl;
    cout<<"                Esc - Exit from programm."<<endl;
    cout<<"__________________________________________________________________"<<endl;
    cout<<"__________________________________________________________________"<<endl;
    cout<<endl;
}
void main()
{
    NodeQueue queue;
    /*int leng = queue.lenght();*/
    char key_moment = 0;
mainloop:
    while(key_moment != 27)
    {
        menu();
        key_moment = _getch();
        switch(key_moment)
        {
        case '1':
            {
                queue.enqueue();
                break;
            }
        case '2':
            {
                queue.dequeue();
                break;
            }
        case '3':
            {
                queue.print();
                break;
            }
        case '4':
            {
                queue.clean();
                break;
            }
        case '5':
            {
                cout<<"The lenght of queue is: "<<queue.getLenght()<<endl;
                break;
            }
        case '6':
            {
                int num;
                cout<<" Insert number of element: ";
                cin>>num;
                cout<<"\n Value is \""<<queue[num]<<"\""<<endl;
                break;
            }
        default:
            {
                cout<<" Wron key."<<endl;
            }
        }
    }
    return;
}
Добавлено через 5 минут
проверил у мя все работает, дайте свой код разберемся, к тому же в тексте ошибки явно сказано что проблема в мейе).
1
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
04.11.2012, 01:16  [ТС]
неее Вы меня не так поняли, я пробовал ваш запустить и эта ошибка вышла, а потом понял что там нету точки входа то есть мейна)

Добавлено через 4 минуты
ого у вас програмка вышла) где Вы этому научились расскажите мне если не секрет)

Добавлено через 6 минут
почитал ваш код раз 20 чучуть понял но не все
0
 Аватар для dederkay
46 / 46 / 4
Регистрация: 08.12.2010
Сообщений: 161
04.11.2012, 01:53
Ну код довольно таки прост, и много чего не хватает еще, например побольше проверок и исключительных ситуаций. Учил на первом курсе, но того что давали преподаватели было мало, далее книга по С, пожже С++, чтот вроде для чайников. Позже пошел Страуступ, еще много книг и статьей которые не запомнились, в данный момент остановился на С++ for real Programmists просто великолепная книга, хоть и трудная но великолепна, для тех кто делает что то вроде буста или кюти очень даже супер, много интересного о правильном стиле да и читается оч приятно с перерывами. Вам же советую просто искать и запоминать, модифицыровать, развиваться и все у вас получиться. Удачи, если что обращайтесь)
1
04.11.2012, 12:37

Не по теме:

а мы не учили в универе стеки и тут все свалилось на голову)
Если ты будешь рассчитывать на то, что тебя в универе чему-то обучат, то ничего не достигнешь. Нужно самому учиться.

0
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
04.11.2012, 15:12  [ТС]
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
#pragma once
#include <iostream>
using namespace std;
 
class Stack
{
private:
    int count;//кількість
    struct Node//структура вузол
    {
        char data;//дані шаблонного типу
        Node* prev;//покажчик на попередній елемент
        char& getData(void)//функція що повертає сслику на дані
        {
            return data;// повертаємо дані
        }
    };
    Node* bottom;//покажчик на вершину стеку
public:
    Stack(void):count(0), bottom(0)//облнуляємо змінні в констукторі
    {
    }
    ~Stack(void)//дестуктор
    {
        clear();//викликаємо функцію очищення
    }
    
    void push(char elem)//функція яка добаляє елемент на вершину стеку, приймає на вхід дані
    {
        Node* Temp = new Node;//створюємо новий елемент
        Temp->data = elem;//заповнюємо його дані вхідними даними
        Temp->prev = bottom;//вказуємо що вершина знаходиться перед ним
        bottom = Temp;//тепер вершина і є він
        count++;//інкрементуємо лічильник
    }
    void pop(void)//функція видалення елементу з вершини
    {
        if(!bottom)//у разі коли вершини не існує
        {
            cout<<"Err. Stack is empty."<<endl;//виводимо на екран помилку
            return;//виходимо з функції, не повертаючи значення
        }
        Node* pTemp = bottom->prev;//створюємо новий елемент який зберігає в собі елемент на рівень нижчий вершини
        delete bottom;//видаляємо вершину
        bottom = pTemp;//нова вершина рівна тому елементу
        count--;//декрементуємо лічильник
    }
    void clear(void)//функція очищення
    {
        while(bottom)//циклічно виконуємо доки існую вершина
        {
            Node* delPtr = bottom->prev;//створюємо новий елемент який зберігає в собі елемент на рівень нижчий вершини
            delete bottom;//видаляємо вершину
            bottom = delPtr;//нова вершина рівна тому елементу
        }
        count = 0;//обнуляємо лічильник
        bottom = NULL;//обнуляємо вершину
    }
    char getBottomData(void)const//функція що повертає дані з вершини
    {
        return bottom->data;//повертаємо дані вершини
    }
    int rCount(void)const//функція що повертає кількість елементів
    {
        return count;//повертаємо лічильник(поточна кількість)
    }
    friend ostream& operator<<(ostream &o, const Stack &obj)//оператор запису в поток
    {
        if(!obj.bottom)//у разі коли обєкту не існує
        {
            o<<"Err. Stack is empty."<<endl;//записуємо в поток меседж про помилку
            return o;//повертаємо ссилку на поток для того щоб можна було робити так cout<<stack<<"lolwto?";
        }
        o<<"\n";//записуємо в поток перехід на новий рядок
        Node* p = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(; p; p = p->prev)//циклічно перебраємо всі елементи покажчика
        {
            o<<" * "<<p->data<<" * "<<endl;//записуючи в поток виведення дані з зірочками по сторонам і переходами на новий рядок
        }
        o<<endl;//перехід на новий рядок
        return o;
    }
    friend istream& operator>>(istream &i, Stack &obj)//оператор зчитування з потоку
    {
        Node* b = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(; obj.bottom; obj.bottom = obj.bottom->prev)//циклічно перебраємо всі елементи об'єкту
        {
            cout<<"Insert stack data: ";//виводимо на екран "введіть дані"
            i>>obj.bottom->getData();//зчитуємо  потоку дані записуючи їх в дані елементу стеку
        }
        obj.bottom = b;//відновлюємо покажчик на голову
        return i;//повертаємо ссилку на поток
    }
};
почему в строчках
C++
1
 Node* p = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
C++
1
Node* b = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
не определяется Node* ?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 15:37

Не по теме:

Ужасные комментарии в коде.


Что именно вас смущает? Тип Node*? Это указатель на Node. Или то, что не идёт отдельно
Node *a;
a = obj.bottom;
?
0
0 / 0 / 3
Регистрация: 28.10.2012
Сообщений: 157
04.11.2012, 16:42  [ТС]
Я имел в виду что указатель Node* не определяется, то есть сначала все нормально,а в строчках что выше написал, пишет что Node* не определен.

Добавлено через 17 минут
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
#pragma once
#include <iostream>
using namespace std;
 
class Stack
{
private:
    int count;//кількість
    struct Node//структура вузол
    {
        char data;//дані шаблонного типу
        Node* prev;//покажчик на попередній елемент
        char& getData(void)//функція що повертає сслику на дані
        {
            return data;// повертаємо дані
        }
    };
    Node* bottom;//покажчик на вершину стеку
public:
    Stack(void):count(0), bottom(0)//облнуляємо змінні в констукторі
    {
    }
    ~Stack(void)//дестуктор
    {
        clear();//викликаємо функцію очищення
    }
    
    void push(void)//функція яка добаляє елемент на вершину стеку, приймає на вхід дані
    {
        Node* Temp = new Node;//створюємо новий елемент
        fflush(stdin);
        printf("Insert queue element: ");                /*temp->data = value;*/
 
        if(!bottom)
        {
        bottom = Temp;
        count++;//інкрементуємо лічильник
        cout<<"Element: \""<<Temp->data<<"\" has been added to bottom."<<endl;
        return;
        }
        Temp->prev = bottom;//вказуємо що вершина знаходиться перед ним
        bottom = Temp;
        cout<<"Element: \""<<Temp->data<<"\" has been added to bottom."<<endl;
        count++;
    }
    void pop(void)//функція видалення елементу з вершини
    {
        if(!bottom)//у разі коли вершини не існує
        {
            cout<<"Err. Stack is empty."<<endl;//виводимо на екран помилку
            return;//виходимо з функції, не повертаючи значення
        }
        Node* pTemp = bottom->prev;//створюємо новий елемент який зберігає в собі елемент на рівень нижчий вершини
        delete bottom;//видаляємо вершину
        cout<<"Element \""<<bottom->data<<"\" is deleted from bottom"<<endl;
        bottom = pTemp;//нова вершина рівна тому елементу
        count--;//декрементуємо лічильник
    }
    void clear(void)//функція очищення
    {
        while(bottom)//циклічно виконуємо доки існую вершина
        {
            Node* delPtr = bottom->prev;//створюємо новий елемент який зберігає в собі елемент на рівень нижчий вершини
            delete bottom;//видаляємо вершину
            bottom = delPtr;//нова вершина рівна тому елементу
        }
        count = 0;//обнуляємо лічильник
        bottom = NULL;//обнуляємо вершину
        cout<<" All elements of queue is deleted."<<endl;
    }
    char getBottomData(void)const//функція що повертає дані з вершини
    {
        return bottom->data;//повертаємо дані вершини
    }
    int rCount(void)const//функція що повертає кількість елементів
    {
        return count;//повертаємо лічильник(поточна кількість)
    }
    friend ostream& operator<<(ostream &o, const Stack &obj)//оператор запису в поток
    {
 
        if(!obj.bottom)//у разі коли обєкту не існує
        {
            o<<"Err. Stack is empty."<<endl;//записуємо в поток меседж про помилку
            return o;//повертаємо ссилку на поток для того щоб можна було робити так cout<<stack<<"lolwto?";
        }
        o<<"\n";//записуємо в поток перехід на новий рядок
        Node* p = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(; p; p = p->prev)//циклічно перебраємо всі елементи покажчика
        {
            o<<" * "<<p->data<<" * "<<endl;//записуючи в поток виведення дані з зірочками по сторонам і переходами на новий рядок
        }
        o<<endl;//перехід на новий рядок
        return o;
    }
    friend istream& operator>>(istream &i, Stack &obj)//оператор зчитування з потоку
    {
        Node* b = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(; obj.bottom; obj.bottom = obj.bottom->prev)//циклічно перебраємо всі елементи об'єкту
        {
            cout<<"Insert stack data: ";//виводимо на екран "введіть дані"
            i>>obj.bottom->getData();//зчитуємо  потоку дані записуючи їх в дані елементу стеку
        }
        obj.bottom = b;//відновлюємо покажчик на голову
        return i;//повертаємо ссилку на поток
    }
};
пробовал сделать второй пример похожий на первый но получилась белиберда) что посоветуете?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 16:56
А, тьфу, понял. Stack::Node*, а не просто Node*. Это внутренний класс Stack, так что надо писать квалификатор.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.11.2012, 16:56
Помогаю со студенческими работами здесь

Стеки
Вот код как к первому стеку прикрипить 2 стек?????? #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; typedef struct el ...

Стеки
Помогите разобраться со стеками.Вылетает 3 ошибки при компеляции. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

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

Стеки
помогите пожалуйста вот что получилось, не могу довести до ума) может кто поможет) задание: Дано арифметическое выражение длинной до 20...

Стеки
Создать стек с числами в диапазоне от –50 до +50.Создать новый стек, в который поместить каждый третий элемент пер-вого стека.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru