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

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

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

Стек (класс) - C++

23.10.2011, 17:09. Просмотров 1069. Ответов 0
Метки нет (Все метки)

Решил переделать эту программу, используя для определения стека не структуру, а класс
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
#include <iostream>
using namespace std;
 
struct node{
        char d;
        node *p;
};
node *first(char d);
void push(node **top, char d);
char pop(node **top);
node *concatenate(node **top, node **top2);
 
int main(){
        cout << "Введите 1й список" << endl;
        char t;
        cin >> t;
        node *top=first(t);
        cin >> t;
        while (t!='0'){
                push(&top,t);
                cin >> t;
        }
        cout << "Введите 2й список" << endl;
        cin >> t;
        node *top2=first(t);
        cin >> t;
        while (t!='0'){
                push(&top2,t);
                cin >> t;
        }
        node *res=concatenate(&top,&top2);
        while (res)
                cout << pop(&res) << ' ';
        return 0;
}
node *first(char d){
        node *pv=new node;
        pv->d=d;
        pv->p=0;
        return pv;
}
void push(node **top, char d){
        node *pv=new node;
        pv->d=d;
        pv->p=*top;
        *top=pv;
}
char pop(node **top){
        char temp=(*top)->d;
        node *pv=*top;
        *top=(*top)->p;
        delete pv;
        return temp;
}
node *concatenate(node **top, node **top2){
        char temp;
        temp=pop(top2);
        node *pv=first(temp);
        while (*top2!=NULL){
                char temp2=pop(top2);
                push(&pv,temp2);
        }
        while (*top!=NULL){
                char temp2=pop(top);
                push(&pv,temp2);
        }
        return pv;
}
Конечно, можно переименовать struct на class и добавить public, но хочу внести операции push, pop, first и concatenate в класс, получился такой код
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
#include <iostream>
using namespace std;
 
class stack{
private:
    struct node{
        char d;
        node *p;
    };
    node *top;
    node *top2;
public:
    node *first(char d);
    void push(node **top, char d);
    char pop(node **top);
    node *concatenate(node **top, node **top2);
 
};
 
 
 
int main(){
        cout << "Введите 1й список" << endl;
        char t;
        cin >> t;
        node *top=first(t);
        cin >> t;
        while (t!='0'){
                push(&top,t);
                cin >> t;
        }
        cout << "Введите 2й список" << endl;
        cin >> t;
        node *top2=first(t);
        cin >> t;
        while (t!='0'){
                push(&top2,t);
                cin >> t;
        }
        node *res=concatenate(&top,&top2);
        while (res)
                cout << pop(&res) << ' ';
        return 0;
}
node *first(char d){
        node *pv=new node;
        pv->d=d;
        pv->p=0;
        return pv;
}
void push(node **top, char d){
        node *pv=new node;
        pv->d=d;
        pv->p=*top;
        *top=pv;
}
char pop(node **top){
        char temp=(*top)->d;
        node *pv=*top;
        *top=(*top)->p;
        delete pv;
        return temp;
}
node *concatenate(node **top, node **top2){
        char temp;
        temp=pop(top2);
        node *pv=first(temp);
        while (*top2!=NULL){
                char temp2=pop(top2);
                push(&pv,temp2);
        }
        while (*top!=NULL){
                char temp2=pop(top);
                push(&pv,temp2);
        }
        return pv;
}
Возникли вопросы, как правильно определить эти 4 функции в описании класса и изменить сами тела функций (в конце)

Добавлено через 36 минут
Вопрос актуален

Добавлено через 1 час 15 минут
Изменил код
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
#include <iostream>
using namespace std;
 
class stack{
private:
    struct node{
        char d;
        node *p;
    };
    node *top;
    node *top2;
public:
    node *first(char d){
            node *pv=new node;
            pv->d=d;
            pv->p=0;
            return pv;
    }
    void push(node **top, char d){
            node *pv=new node;
            pv->d=d;
            pv->p=*top;
            *top=pv;
    }
    char pop(node **top){
            char temp=(*top)->d;
            node *pv=*top;
            *top=(*top)->p;
            delete pv;
            return temp;
    }
    node *concatenate(node **top, node **top2){
            char temp;
            temp=pop(top2);
            node *pv=first(temp);
            while (*top2!=NULL){
                    char temp2=pop(top2);
                    push(&pv,temp2);
            }
            while (*top!=NULL){
                    char temp2=pop(top);
                    push(&pv,temp2);
            }
            return pv;
    }
};
 
int main(){
        cout << "Введите 1й список" << endl;
        char t;
        cin >> t;
        node *top=first(t);
        cin >> t;
        while (t!='0'){
                push(&top,t);
                cin >> t;
        }
        cout << "Введите 2й список" << endl;
        cin >> t;
        node *top2=first(t);
        cin >> t;
        while (t!='0'){
                push(&top2,t);
                cin >> t;
        }
        node *res=concatenate(&top,&top2);
        while (res)
                cout << pop(&res) << ' ';
        return 0;
}
Добавлено через 1 час 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
#include <iostream>
using namespace std;
 
class stack{
public:
    struct node{
        char d;
        node *p;
    node *first(char d);
    void push(node **top, char d);
    char pop(node **top);
    node *concatenate(node **top, node **top2);
    node *entst (node **top);
private:
    };
    node *first(char d){
            node *pv=new node;
            pv->d=d;
            pv->p=0;
            return pv;
    }
    void push(node **top, char d){
            node *pv=new node;
            pv->d=d;
            pv->p=*top;
            *top=pv;
    }
    char pop(node **top){
            char temp=(*top)->d;
            node *pv=*top;
            *top=(*top)->p;
            delete pv;
            return temp;
    }
    node *concatenate(node **top, node **top2){
            char temp;
            temp=pop(top2);
            node *pv=first(temp);
            while (*top2!=NULL){
                    char temp2=pop(top2);
                    push(&pv,temp2);
            }
            while (*top!=NULL){
                    char temp2=pop(top);
                    push(&pv,temp2);
            }
            return pv;
    }
    node *entst (node **top){
        char t;
        cin >> t;
        node *pv=first(t);
        cin >> t;
        while (t!='0'){
                push(&pv,t);
                cin >> t;
        }
        return pv;
    }
};
 
int main(){
        stack st;
        cout << "Введите 1й список" << endl;
        stack::node *top=st.entst(&top);
        cout << "Введите 2й список" << endl;
        stack::node *top2=st.entst(&top2);
        stack::node *res=st.concatenate(&top,&top2);
        while (res)
                cout << st.pop(&res) << ' ';
        return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2011, 17:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стек (класс) (C++):

Класс Стек Stack. не работает класс исключений - C++
Здравствуйте! Решил проверить код на пригодность, но почему то класс исключений выскакивает на ошибке. Я никак не могу понять такие вещи...

Класс стек - C++
Доброго времени! Читаю книгу Р. Лафоре - Объектно-ориентированное программирование С++. В теме: &quot;Массивы как члены классов&quot;...

Шаблонный класс Стек - C++
прошу помочь разобраться с кодом. вопросы выделил по ходу кода. #ifndef _STACKNODE_H_ #define _STACKNODE_H_ #include &lt;string&gt; ...

Определить класс стек - C++
Определить класс стек. В класс включить два конструктора для определе-ния стека по его размеру и путем копирования другого стека. ...

Класс, реализующий стек - C++
Помогите девушке, только учусь программировать и чет пока не очень=( плиииииииииииииииииииииииииз кого не затруднит...... Задание 5....

Стек через класс - C++
Не всекаю где проблема, после создания new_el, значения стека p по переменной fam меняются. Задача такова: создать отсортированный список...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2011, 17:09
Привет! Вот еще темы с ответами:

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

Стек указателей на класс-интерфейс - C++
Задача такая: есть иерархия. Интерфейс -&gt; абстрактный базовый класс -&gt; два наследника и у них ещё по два. Имеется 4 вектора с элементами...

Класс, реализующий стек точек - C++
описание класса ,реализующего стек точек R2(int ,int) очень нужно,плиииз

Класс стек что не так? - C++
Компилятор ругается, что в конструкторе элемент массива объявлён в раз. как такое может быть он же в классе объявлён и видимость прописана....


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

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

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