Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Liberation
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 157
#1

Стеки - C++

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

Реализовать программу, в которой будут использоваться стеки (магазинный и кольцевой) и очередь. В самих программах реализовать такие функции:
заполнение стека(очереди) вручную, удаление и добавление элементов, вывод содержимого на экран, очистка стека (очереди).
Смотрел и читал на форуме о стеках но не понял на чем их применять или они сами по себе?
Можете на коде объяснить своими словами как работает стек?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2012, 15:15     Стеки
Посмотрите здесь:

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

Стеки в С++ - C++
Інформаційне поле елемента сортованого списка-рядок. Створити новий сортований список, в інформаційному полі якого міститься кількість...

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

Стеки - C++
Переставить элементы стека в таком порядке:x(1),x(2)...x(n)->x(1),x(n-1),x(2),x(n-2)... Элементы пронумерованы в порядке их введения в...

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

Стеки - C++
Создать класс типа - стек. Функции-члены вставляют элемент в стек, вытаскивают элемент из стека. Проверяют вершину стека. Помогите...

Стеки - C++
Помогите разобраться со стеками.Вылетает 3 ошибки при компеляции. #include <stdio.h> #include <stdlib.h> #include <conio.h> ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
04.11.2012, 23:43     Стеки #41
приведите плз весь код, и еще какая студия или компилятор?

Добавлено через 47 секунд
какой чар? тут же шаблон)
Liberation
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 157
04.11.2012, 23:48  [ТС]     Стеки #42
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
#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;
        if(bottom->prev && !bottom->prev->prev)
        {
            bottom->prev->prev = 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";//записуємо в поток перехід на новий рядок
        Stack::Node* p = obj.bottom;//створюємо новий покажик який зберігає в собі вершину переданого в оператор обєкту
        for(unsigned int i = 3; p && i > 0; p = p->prev)//циклічно перебраємо всі елементи покажчика
        {
            o<<" * "<<p->data<<" * "<<endl;//записуючи в поток виведення дані з зірочками по сторонам і переходами на новий рядок
            --i;
        }
        o<<endl;//перехід на новий рядок
        return o;
    }
    friend istream& operator>>(istream &i, Stack &obj)//оператор зчитування з потоку
    {
        Stack::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;//повертаємо ссилку на поток
    }
};
не знаю что не так

Добавлено через 22 секунды
студия 2010
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
04.11.2012, 23:59     Стеки #43
мде, вот вам и разница в студиях, 2012 не ругается и довольно приятно отвечает на все действия. Хотя новый стандарт поддерживает не полностью. Если доберусь до ноутбука помогу, ибо тут у меня только 8 и 12. Сейчас на 8 проверю.

Добавлено через 3 минуты
восьмая тоже все норм) остается добраться до 10 но по случаю у меня нет, только на ноуте, а щас дотсупа к нему нет)
Liberation
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 157
05.11.2012, 20:37  [ТС]     Стеки #44
ну ща попробую скачать 2012 и посмотрю

Добавлено через 20 часов 37 минут
да работает, правда как то странно, я так понял надо сделать так что бы элементы можно было добавлять с начала и с конца? и также удалять?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
05.11.2012, 21:43     Стеки #45
И что это тогда за стек такой будет? Называйте его своим именем: дек.
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.11.2012, 22:08     Стеки #46
Цитата Сообщение от Liberation Посмотреть сообщение
добавлять с начала и с конца? и также удалять?
ТС вам же нужен кольцевой стек. Зачем нужно делать дек? или задача все таки сделать дек? Тогда старайтесь правильно формулировать задачу, или проштудируйте хотя бы вики по данному вопросу)
Liberation
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 157
05.11.2012, 23:14  [ТС]     Стеки #47
так значит последний пример и есть кольцевой ? чет я не понял как он работает, просто удаляешь верх и второй элемент становится началом и концом?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 23:20     Стеки
Еще ссылки по теме:

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

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

стеки - C++
создать файл записей с полями: фамилия, возраст. за один просмотр файла вывести фамилии наиболее старых людей.

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

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


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

Или воспользуйтесь поиском по форуму:
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.11.2012, 23:20     Стеки #48
ну поймите теперь он зациклен, формально начала или конца нет стек как кольцо, вот поставьте например вместо тройки в цикле вывода 20, но введите только 4 элемента в стек и вы увидите что элементы повторяются. Ну просто так же вы просто можете проверить на колцевость в вотче просмотрев куда указывает привиос каждого элемента, так вот вы никогда не достигнете конца ибо все будет повторятся много раз)
Yandex
Объявления
05.11.2012, 23:20     Стеки
Ответ Создать тему
Опции темы

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