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

Не могу понять в чем ошибка: реализация односвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция, определяющая достижение начала файла: есть ли такая? http://www.cyberforum.ru/cpp-beginners/thread160173.html
Собственно мне нужна функция, проверяющая достижение начала файла, типа feof только наоборот. Гуглил, ничего не нашел =(
C++ Есть исходники браузера? Есть у кого-нибудь исходники браузера? П.С.Администрации сделайте в каждом разделе форума чат, примерно для таких вопросов. Добавлено через 6 минут П.С. Исходники нужны на чистом Си http://www.cyberforum.ru/cpp-beginners/thread160161.html
Вычислить произведение ряда C++
Господа,нужна помощь. Кому не лень,не трудно,помогите чем могите. Собственно вот: Блок А 1. В области 12 районов. Известны количество жителей каждого района ( в тысячах человек) и плотность населения в нем ( тыс. чел./ км2). Определить общую площадь территории области. (задачи без использования массивов). 2. Дан массив целых чисел (n=12), заполненный случайным образом числами из...
C++ Непонятная операция
Всем доброго времени суток! Помогите разобраться, ранее не встречал: Есть enum Sute {clubs,diamonds,hearts,spades} в main() мы создаем колоду карт и заполняем. Так вот при заполнении в цикле есть такая операция: Suit su = Suit(j/13); С левой частью все ясно, а вот с правой не очень. Почему мы не работаем с объектом Suit, а как-то напрямую это делаем...вообще не ясно.
C++ Закрывается программа http://www.cyberforum.ru/cpp-beginners/thread160092.html
После запуска откомпилированной программы я её запускаю и окно программы сразу закрывается (пользуюсь компилятором Code::Blocks) как можно это исправить
C++ Вопрос насчёт рекурсии в цикле Здравствуйте. У меня вопрос насчёт рекурсии в цикле. Вот пример: int massiv={1,2,3}; int heapPermute(int n){ cout <<"В начале n=" <<n <<' '; int temp=0; int razmer = sizeof(massiv)/sizeof(int); if(n==0) { for(int i=0; i<razmer; i++) { if(i==0) {cout <<endl; } cout <<massiv <<' '; } } else { подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5760 / 3409 / 255
Регистрация: 08.02.2010
Сообщений: 7,406
21.08.2010, 06:47     Не могу понять в чем ошибка: реализация односвязного списка
Блин... Опоздал
Вот простейшая реализация шаблонного стека (если с шаблонами не понятно, удали все записи вида template<class T> и замени везде T типом, который тебе нужен):
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
#ifndef MY_STACK_HPP
#define MY_STACK_HPP
 
#include <stdexcept>
 
namespace my
{
    template<class T>
    class stack
    {
        struct node
        {
            T       value;
            node*   next;
 
            node(const T& val)
                : value(val), next(NULL) {}
        };
        node*       top;
 
    public:
 
        stack();
        ~stack();
        void push(const T& val);
        T pop();
        bool empty() const;
    };
 
    template<class T>
    stack<T>::stack()
        : top(NULL) {}
 
    template<class T>
    stack<T>::~stack()
    {
        while(top)
        {
            node* temp = top;
            top = top->next;
            delete temp;
        }
    }
 
    template<class T>
    void stack<T>::push(const T &val)
    {
        if(top)
        {
            node* newNode = new node(val);
            newNode->next = top;
            top = newNode;
        }
        else
            top = new node(val);
    }
 
    template<class T>
    T stack<T>::pop()
    {
        if(!top)
            throw(std::runtime_error("Can't pop from the empty stack"));
        T retVal = top->value;
        node* delNode = top;
        top = top->next;
        delete delNode;
        return retVal;
    }
 
    template<class T>
    bool stack<T>::empty() const
    {
        return (top == NULL);
    }
}
 
#endif // MY_STACK_HPP
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
#include <iostream>
#include <cstdlib>
 
#include "my_stack.hpp"
 
int main()
{
    try
    {
        my::stack<int> stk;
        std::cout << "Pushing to the stack..." << std::endl;
        for(size_t i= 0; i < 10; ++i, std::cout << i << " ")
            stk.push(i + 1);
        std::cout << std::endl << "Popping from the stack..." << std::endl;
        while(!stk.empty())
            std::cout << stk.pop() << " ";
        std::cout << std::endl;
    }
    catch(std::exception& e)
    {
        std::cerr << e.what() << std::endl;
        return EXIT_FAILURE;
    }
 
    return EXIT_SUCCESS;
}
Стек всегда будет выталкивать элементы в обратном порядке их добавления - потому, что это структура Last In - First Out. Стек не должен поддерживать операции добавления и удаления кроме как с вершины стека, иначе это уже будет не стек.
Если ты хочешь вывести элементы в их порядке добавления, то это можно сделать с помощью двух стеков - выталкиваешь все элементы из первого стека во второй, потом выталкиваешь все элементы из второго, поочередно их распечатывая.
Если ты хочешь сделать то, что тебе сказал siger (кстати, по-моему, он и не говорил, что тебе нужно использовать именно стек), то лучше всего будет написать очередь и использовать ее.
 
Текущее время: 13:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru