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

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

Восстановить пароль Регистрация
 
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
10.05.2014, 13:13     Стек через связный список #1
Здравствуйте мне нужно переделать стек через указатели и связный список.
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;
    }
}
    }}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 13:13     Стек через связный список
Посмотрите здесь:

C++ Стек, связный список и глупый вопрос
C++ Связный список
Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. C++
Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке) C++
Стек (связный список). Нужно ли проверять на пустоту? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
10.05.2014, 13:14     Стек через связный список #2
Для начала: Написать стек на указателях
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
10.05.2014, 15:34     Стек через связный список #3
Croessmah, так он походу хочет этот переделать через указатели.
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
10.05.2014, 15:49  [ТС]     Стек через связный список #4
Да да мне нужно именно этот переделать через указатели
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
10.05.2014, 15:52     Стек через связный список #5
Цитата Сообщение от UnsKneD Посмотреть сообщение
так он походу хочет этот переделать через указатели.
и в чем разница между "переделать это" и "написать новое"?
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
10.05.2014, 16:02     Стек через связный список #6
Тут все просто. Пишем обычный односвязный список. Вершина стека - голова списка. Добавление в стек - добавление в начало списка. Извлечение из вершины - удаление первого элемента списка.
Найти простейший односвязный список можно на форме поиском.
Yandex
Объявления
10.05.2014, 16:02     Стек через связный список
Ответ Создать тему
Опции темы

Текущее время: 07:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru