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

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

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

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

23.10.2011, 17:09. Просмотров 1040. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2011, 17:09     Стек (класс)
Посмотрите здесь:

C++ Класс, реализующий стек
C++ Класс стек, алгоритм решения
C++ Описать класс, реализующий стек
Класс стек, рекурсия, C++
C++ Стек через класс
Класс стек что не так? C++
Класс Стек Stack. не работает класс исключений C++
Класс стек C++
C++ Определить класс стек
C++ Стек указателей на класс-интерфейс
C++ Шаблонный класс Стек
C++ Написать класс, реализующий Стек

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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