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

Принцип реализации и работы со стеком - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод из char в int http://www.cyberforum.ru/cpp-beginners/thread732941.html
нужно перевести из char в int, способ перевода следующий: "значение цифры равно значению ее символа в таблице символов компьютера минус значение '0'." (c)книжка как это реализовать?
C++ Есть ли разница в каком порядке объвлены функции? Есть файл Wnd.h class Wnd { public: void function(int min,int max); Wnd(); ~Wnd(); }; http://www.cyberforum.ru/cpp-beginners/thread732901.html
C++ Рекурсивная функция
Доброго времени суток, форум. Пожалуйста, помогите решить задачу по рекурсивным функциям на С++. Известно, что Xn мож но возвести следующим образом? Xn=1, если n=0 Xn=X2(n/2), если n четное Xn=X*X2(n/2), если n нечетное. Написать программу, которая вычисляет Xn
Вылетает ошибка Integer division by zero. C++
Есть такой класс : class TreapNode { public: char character; TreapNode* leftChild; TreapNode* rightChild; TreapNode* parent; size_t subTreeSize; int priority;
C++ Как связать несколько файлов одной программы http://www.cyberforum.ru/cpp-beginners/thread732885.html
есть 3 файла MainFile.cpp #include <iostream> #include <windows.h> #include <fstream> #include "BankAccounts.h" using namespace std;
C++ Простые циклы с++ Ребят, помогите прогу написать по заданию, пожалуйста. подробнее

Показать сообщение отдельно
Praxie
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 5
15.12.2012, 21:16     Принцип реализации и работы со стеком
Здравствуйте! В ходе изучения применения стека на c++, начал рассматривать нижеприведенный пример (Программа вычисляет обратную польскую запись).
Сразу же появились вопросы.
1. Что это за конструкция? push(next, ((a = pop(next)), (b = pop(next)), b - a));
2. Объясните на пальцах, как устроены "внутри" функции push и pop. С указателями и адресами я немного знаком, но разобраться не могу даже с помощью комментариев...
Спасибо.

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
#include <iostream>
#include <conio.h>
 
struct stek
{
    int d;
    struct stek *next; // указатель на следующий элемент списка (стека)
};
 
void push(stek* &next, int d);  // функция будет помещать элемент в стек
                                // next – указатель на вершину стека
int pop(stek* &next);           // функция будет извлекать элемент их стека
                                // вершина которого - next
 
void push(stek* &next, int d)
{
    stek *pv = new stek;      // объявляем новую динамическую переменную типа stek
    pv->d = d;                // записываем  значение, которое помещается в стек
    pv->next = next;          // связываем новый элемент стека с предыдущим
    next = pv;                // новый элемент стека становится его вершиной
}
 
int pop(stek* &next)
{
    int temp = next->d;     // извлекаем в переменную temp значение в вершине стека
    stek *pv = next;        // запоминаем указатель на вершину стека, чтобы затем
                            // освободить выделенную под него память
    next = next->next;      // вершиной становится предшествующий top элемент
    delete pv;              // освобождаем память, тем самым удалили вершину
    return temp;            // возвращаем значение, которое было в вершине
}
 
 
int main()
{
    // char v[25]="5 9 8 + 4 6 * * 7 + * ";
    char v[]="1 2 -";
    stek *next=0;
    int a, b;
    for(int i = 0; v[i] != '\0'; i++)
    {
        switch(v[i])
        {
            case '+': push(next, pop(next) + pop(next)); break;
            case '-': push(next, ((a = pop(next)), (b = pop(next)), b - a)); break;
            case '*': push(next, pop(next) * pop(next)); break;
            case '/': push(next, ((a = pop(next)), (b = pop(next)), b / a)); break;
            default:
                if(isdigit(v[i])) push(next, 0);
                while(isdigit(v[i]))
                    push(next, 10*pop(next) + (v[i++]-'0'));
        }
    }
    printf("\n %i \n",pop(next));
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru