Форум программистов, компьютерный форум, киберфорум
Наши страницы

Стек через связный список - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатели на массивы: В чем принципиальное различие между объявлениями указателей? http://www.cyberforum.ru/cpp-beginners/thread1171308.html
Вопрос по теории В чем принципиальное различие между данными обьявлениями? (+ правильно ли я понимаю, что 1и2, 3и4 это синонимы?) int main(int argc, char** argv) int main(int argc, char **argv)...
C++ Не работает getline в VS2012 От код на линуксе все отлично а от в визуалке проблемы #include <fstream> #include <cstring> #include <iostream> using namespace std; int main() { string a; char s; http://www.cyberforum.ru/cpp-beginners/thread1171300.html
C++ Разработать приложение, выводящее на экран гистограмму численности населения стран мира
Разработать приложение, выводящее на экран гистограмму (столбиковую диаграмму) численности населения стран мира. В качестве исходных данных для построения гистограммы использовать введенные значения:...
C++ Внешняя однофазная сортировка прямым (простым) слиянием
По большей части интересует не сама однофазная сортировка прямым слиянием, а слово внешняя. Как я понимаю, сортировать надо данные в файле. Но вот вопрос. Файл можно разбить на два подфайла, или...
C++ Перегрузка операций для класса "Комплексное число в тригонометрической форме" http://www.cyberforum.ru/cpp-beginners/thread1171285.html
помогите пожалуйста доделать программу на тему перегрузка.Дано комплексное число в тригонометрической форме а=p*(cos pfi+ i* sin pfi).Членами класса являются модуль Р и аргумент pfi. Использовать...
C++ Отредактировать программу Заранее извиняюсь за использованный раздел (т.к. не знаю в какой раздел запостить). Есть готовая программа, вот ее краткий алгоритм: 1. Запускается программа 2. По очереди у пользователя... подробнее

Показать сообщение отдельно
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32

Стек через связный список - C++

10.05.2014, 13:13. Просмотров 373. Ответов 5
Метки (Все метки)

Здравствуйте мне нужно переделать стек через указатели и связный список.
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
#include <iostream>
#include <locale.h>
using namespace std;
const int n=10;
class STACK_A
{
private:
    int top;
    char c[n];
public:
    STACK_A();
    friend class reckon;
    friend void restore(STACK_A ob_A, STACK_A ob_B);
    void push(char s);
    void pop ();
    void show_stack();
    void make_null();
};
STACK_A::STACK_A(){
    top=n;
    cout<<"\nСтек успешно создан"<<endl<<endl;
}
void STACK_A:: push(char s)
{
    if (top==0)
        cout<<"error"<<endl;
    else
    {
        top--;
        c[top]=s;
    }
}
void STACK_A:: pop()
{
    top++; 
}
void STACK_A:: show_stack () 
{
    cout<<endl<<"Ваш стек:";
    for(int i=top;i<n;++i)
        cout<<endl<<"\t"<<c[i];
    cout<<endl;
}
void STACK_A::make_null()
{
    top=n;
}
class reckon
{
private:
    int i, j, a, b;
public:
    reckon();
    void counting (STACK_A ob_A, STACK_A ob_B);
};
reckon::reckon(){
    i=n; j=n;
}
void reckon::counting(STACK_A ob_A, STACK_A ob_B)
{
    while (i!=ob_A.top){
        i--;}
    while (j!=ob_B.top){
        j--;}
    a=n-i; b=n-j;
    cout<<"\nв стеке А "<<a<<" элементов\nв стеке B "<<b<<" элементов\n"
        <<"общее число элементов в стеках:\n"<<a+b<<endl<<endl;
}
void restore(STACK_A ob_A, STACK_A ob_B)
{
    int j, i;
    cout<<"Начальное положение элементов в стеке А:\n\t";
    for (j=n-1; j>=ob_A.top; --j){
        cout<<ob_A.c[j]<<" ";}
    cout<<endl;
    cout<<"Начальное положение элементов в стеке B:\n\t";
    for (i=n-1; i>=ob_B.top; --i){
        cout<<ob_B.c[i]<<" ";}
    cout<<endl;
}
void main()
{
    setlocale(LC_ALL, "Rus");
    STACK_A obj_A; STACK_A obj_B; reckon obj_R;
start:
    cout<<"Выберете операцию:\nA - действия над стеком A;\nB - действия над стеком B;\n"
        <<"= - показать начальное положение элементов\n+ - подсчитать общее количество элементов\n"
        <<"~ - выйти из программы\n";
    char a;
    cin>>a;
    while (a!='~'){
    switch (a){
case'=': restore(obj_A, obj_B); goto start;
case'+': obj_R.counting(obj_A, obj_B); goto start;
case'A':
    cout<<" Выберете операцию:\n # - удалить вершину;\n = - вывод стека на экран;\n"
        <<" _ - очистить стек;\n\n\t\t\t< - вернутся к выбору стека;\n"
        <<"Любой другой символ додаётся в стек;\n\n начните ввод:\n";
    char C;
    cin>>C;
    while (C!='~')
    {   
        switch (C)
        {
        case'#': obj_A.pop(); break;
        case'=': obj_A.show_stack(); break;
        case'_': obj_A.make_null(); break;
        case'<': goto start;
        default: obj_A.push(C);
        }
        cin>>C;
    }
case'B':
    cout<<" Выберете операцию:\n # - удалить вершину;\n = - вывод стека на экран;\n"
        <<" _ - очистить стек;\n\n\t\t\t< - вернутся к выбору стека;\n"
        <<"Любой другой символ додаётся в стек;\n\n начните ввод:\n";
    char C_B;
    cin>>C_B;
    while (C_B!='~')
    {   
        switch (C_B)
        {                  
           case'#': obj_B.pop(); break;
           case'=': obj_B.show_stack(); break;
           case'_': obj_B.make_null(); break;
           case'<': goto start;
           default: obj_B.push(C_B);
        }
        cin>>C_B;
    }
}
    }}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru