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

Простейшая реализация стека и очереди - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при попытке удаления указателя http://www.cyberforum.ru/cpp-beginners/thread1199126.html
Программа работает,но при попытке выйти из нее по условию,вылетает ошибка.Если закомментировать delete, то выходит без ошибок.Подскажите, как исправить.. #include "stdafx.h" #include <iostream> #include <conio.h> #include <string> using namespace std; struct Note {
C++ Метод Монте-Карло Помогите написать программу для вычисления определенного интеграла методом Монте-Карло. http://www.cyberforum.ru/cpp-beginners/thread1199118.html
Радиус вписанной окружности C++
Пользователь вводит 3 стороны треугольника. Найти радиус вписанной окружности. Можно простенькую функцию для вычисления? С граф. интерфейсом я сам справлюсь , спасибо!
C++ Описать класс, реализующий стек и работу с ним
Вот вроде понял и что такое стек, и что такое классы и как их реализовать в отдельности. Но как их объеденить в одну программу представления не имею. Пожалуйста, хотя бы подтолкните в нужном направлении, уже много подобных тем просмотрел, но мало что из них понял. Вот текст задания: Описать класс, реализующий стек и работу с ним. //1.) Класс должен содержать следующие сведения о наличии...
C++ реализовать класс, осуществляющий поиск и замену местами последнего и предпоследнего слова в строке http://www.cyberforum.ru/cpp-beginners/thread1199109.html
реализовать класс, осуществляющий поиск и замену местами последнего и предпоследнего слова в строке С++
C++ Подключить библиотеку Как подключить эту библиотеку (во вложении). В ней мат. функции. Исопльзую VS подробнее

Показать сообщение отдельно
FinalQ
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 17

Простейшая реализация стека и очереди - C++

04.06.2014, 18:05. Просмотров 1602. Ответов 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
66
67
68
69
70
71
72
73
74
75
#include <cstdlib>
#include <iostream>
using namespace std;
 
class Stack {
  private:
    int* arr; // Указатель на динамический массив с элементами стека
    int* top; // Указатель на верх стека
    int size; // Емкость стека
 
 
 Stack(const Stack& s) { // Копирующий конструктор
        this->size = s.size;
        this->arr = new int[s.size]; // Создаём НОВЫЙ динамический массив
        this->top = arr;
        int* p = s.arr; // Отдельный указатель на элементы старого массива
        while (p < s.top) {
            *top++ = *p++; // Копируем элементы и позицию в новый массив
        }
    }
bool isEmpty() { // Метод проверяющий пуст ли стек
        if (top <= arr) {
            return true;
        } else {
            return false;
        }
    }
bool isFull() { // Метод проверяющий полон ли стек
        if (top - arr >= size) {
            return true;
        } else {
            return false;
        }
    }    
void push(int val) { // Метод добавляющий элемент в стек
        if(!isFull()) {
            *top = val;
            top++;
        } else {
            cout << "Stack full!" << endl; // Стэк полон
        }
    }
int pop() { // Метод извлекающий верхний элемент из стека
        if(!isEmpty()) {
            top--;
            return *top;
        } else {
            return 0; // Стэк пуст, вернём нуль
        }
    }
void printStack() { // Метод выводящий элементы стека в строку
        int* p = arr;
        while (p < top) {
            cout << *p++ << ' ';
        }
        cout << endl;
    } 
~Stack() { // Деструктор
        delete[] arr; // Освобождает память от массива
    };
};
 
int main(void) {
    Stack s(3); // Создаём стек емкостью в 3 элемента
    s.push(1);
    s.push(2);
    s.push(3);
    s.push(66); // Увидим сообщение о том, что стек полон
    //Stack t(s); // Создаём второй стек, копируя первый
    //cout << t.pop() << endl; // Извлекаем и выводим верхний элемент
    //t.push(99); // Добавляем другой элемент на освободившееся место
    s.printStack(); // Увидим 3 элемента стека
    cin.get();
    return 0;
}
В ходе ознакомления с примером возник ряд вопросов:
1) при вводе элементов в порядке 1 2 3, выводит стек в том же порядке (1 2 3), а по идее должен в порядке 3 2 1 (последним пришёл — первым вышел), не могу собственно найти ошибку, ткните носом пожалуйста.
2) по этому же примеру необходима реализация очереди, для этого я так понимаю нужно добавить в класс int* bot; и изменить (как?) алгоритм ввода, всё остальное останется таким же.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru