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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
#1

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

10.05.2014, 13:13. Просмотров 364. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 13:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек через связный список (C++):

Стек, связный список и глупый вопрос - C++
Содержание stack.h #include &lt;cstddef&gt; // Определение константы NULL template &lt;typename T&gt; class Stack { public: Stack(); ...

Стек (связный список). Нужно ли проверять на пустоту? - C++
Всем добра, у меня к Вам есть парочка вопросов о стеке, буду благодарен за помощь. Передо мной стояла задача: 1) Инициализировать...

Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке) - C++
Здраствуйте! Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов. Вот такая задачка : Программа...

Список: связный список, в котором информация о книгах сортируется по убыванию стоимости. - C++
Друзья помогите с реализацией списка. Нужно запрограммировать связный список, в котором информация о книгах сортируется по убыванию...

Связанный список. Создать, записать в связный список последовательность слов,обозначающих месяцы года,заданных пользователем - C++
Создать связанный список.Кроме информационных полей он должен обязательно содержать указатели на предыдущий и следующий за ним...

Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента - C++
Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента

5
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,879
Записей в блоге: 3
Завершенные тесты: 1
10.05.2014, 13:14 #2
Для начала: Написать стек на указателях
0
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
10.05.2014, 15:34 #3
Croessmah, так он походу хочет этот переделать через указатели.
0
Grraf
1 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 32
10.05.2014, 15:49  [ТС] #4
Да да мне нужно именно этот переделать через указатели
0
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,879
Записей в блоге: 3
Завершенные тесты: 1
10.05.2014, 15:52 #5
Цитата Сообщение от UnsKneD Посмотреть сообщение
так он походу хочет этот переделать через указатели.
и в чем разница между "переделать это" и "написать новое"?
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
10.05.2014, 16:02 #6
Тут все просто. Пишем обычный односвязный список. Вершина стека - голова списка. Добавление в стек - добавление в начало списка. Извлечение из вершины - удаление первого элемента списка.
Найти простейший односвязный список можно на форме поиском.
0
10.05.2014, 16:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 16:02
Привет! Вот еще темы с ответами:

Связный список - C++
node *temp; 1.temp = (node*)malloc(sizeof(node)); 2.temp = new node; 1)Как работает (node*)malloc(sizeof(node)) ? что...

Связный список - C++
Скажите, пожалуйста, почему не отображается lastName? Или в структуре можно создавать только один тип для связных списков? #include...

Связный список - C++
Здравствуйте. Подскажите информацию насчет связных списков. Книгу, или сайтик.

Связный список - C++
Не получается нормально скомпоновать файлы :( Сделал связный список использую шаблоны класса. Файл ListSpisok.h и есть сам связный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru