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

Стек, необходима доработка программы. - C++

Восстановить пароль Регистрация
 
vad105
Сообщений: n/a
26.12.2011, 18:23     Стек, необходима доработка программы. #1
Вот условие Стек – KStack
Методы:
конструкторы, деструктор;
операции: >>, <<, +, +=, =, ==, !=
функции:
IsEmpty(),-проверяет, не пустой ли стек
Size(),-возвращает количество элементов в стеке
Clear() - удалить все элементы стека,
Top() - получить значение верхнего элемента стека,
Push() – добавить новый элемент стека,
Pop() – удалить верхний элемент из стека,
Swap() - обменять значения (т.е. стеки).
стек реализовать на списке.
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
#include <iostream>
#include <stdlib.h>
using namespace std;
struct Item
{
    public:
        int data;
        Item* next;
    Item ( )
        {next=0; data=0;}
    Item(const int& _data)
    {
        data=_data;
        next=0;
    }
};
class KStack
{
    public:
        Item* top;
        int count;  
        KStack(){top=0, count=0;}
        KStack(const KStack*& stack2)
        {
            Item* p=stack2->top;    
            while(p)
            {
                this->push(p->data);
                p=p->next;      
            }
        }
        ~KStack()
        {
            Clear();
        }
    KStack operator +(KStack st);
    KStack& operator +=(KStack& st2);
    KStack& operator =(KStack& st2);
    bool operator ==(KStack& st);
    bool operator !=(KStack& st);
    bool IsEmpty();// проверяет, не пуст ли стек
    void Size();//колчество элементов в стеке
    void Clear(); //удалить все элементы стека
    int Top();// получить значение верхнего элемента стека,
    void Swap(KStack st);//обменять значения (т.е. стеки).
    void push (int d);//добавляет новый элемент в стек
    void pop (); //удалить верхний элемент стека
    void print();// вывод стека
    friend ostream& operator <<(ostream& out,KStack& st)
    {
        st.print();
        return out;
    }
    friend istream& operator >>(istream& in,KStack& st)
    {
        char ch[100];
        cin.getline(ch, 100);
        char* temp=strtok(ch, " ");
        while(temp)
        {
            int k=atoi(temp);
            st.push(k);
            temp=strtok(0, " ");
        }
        return in;
    }
};
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
#include "header.h"
void main()
{
    setlocale (LC_ALL, "russian");
    KStack stack1, stack2;
    cout<<"Стек 1"<<endl;
    cin>>stack1;
    cout<<"Стек 2"<<endl;
    cin>>stack2;
    stack1+=stack2;
    cout<<stack1;
    cout<<endl;
    /*cout<<"Summa steckov"<<stack1+stack2;
    stack1.Swap(stack2);
    cout<<"Steck 2 posle obmena so steckom 1"<<stack2;
    if (stack1==stack2) cout<<"Стеки одинаковы ";
    if(stack1!=stack2) cout<<"Стеки различны ";
    bool a=stack1.IsEmpty();
    cout<<"Steck 1 pust?(1-yes, 0-no) "<<a<<endl;;
    stack2.Size();
    cout<<"Razmer stecka 2="<<stack2.count<<endl;
    int d=stack1.Top();
    cout<<"verhuzka stecka 1"<<d<<endl;
    system ("pause");*/
    return ;
}
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
#include "header.h" 
KStack KStack::operator +(KStack st)
    {
        KStack sn;
        Item *temp2=this->top;
        while(temp2)
        {
            sn.push(temp2->data);
            temp2=temp2->next;
        }
        Item* temp=st.top;
        while(temp)
        {
            sn.push(temp->data);
            temp=temp->next;
        }
        return sn;
    }
    KStack& KStack::operator +=(KStack& st2)
    {
        *this=*this+st2;
        return *this;
    }
    KStack& KStack::operator =(KStack& st2)
    {
        Item* p=st2.top;    
            while(p)
            {
                this->push(p->data);
                p=p->next;      
            }
        return *this;
    }
    bool KStack::operator ==(KStack& st) 
    {
        if(this->count!=st.count) return false;
        else
        {
            Item* temp=st.top;
            Item* temp2=this->top;
            while(this->count)
            {
                if(temp->data!=temp2->data) return false;
                temp=temp->next;
                temp2=temp2->next;
            }
            return true;
        }
    }
    bool KStack::operator !=(KStack &st)
    {
        if(this->count!=st.count) return true;
        else
        {
            Item* temp=st.top;
            Item* temp2=this->top;
            while(this->count)
            {
                if(temp->data!=temp2->data) return true;
                temp=temp->next;
                temp2=temp2->next;
            }
            return false;
        }
    }
    bool KStack::IsEmpty()// проверяет, не пуст ли стек
    {
        if(top==0) return true;
        return false;
    }
    void KStack::Size()//колчество элементов в стеке
    {
        Item* p=top;
        while(p)
        {
            count++;
            p=p->next;
        }
    }
    void KStack::Clear() //удалить все элементы стека
    {
        Item* temp=top;
        while(temp)
        {
            pop();
            temp=top;
        }
    }
    int KStack::Top()// получить значение верхнего элемента стека,
    {
        return top->data;
    }
    void KStack::Swap(KStack st)//обменять значения (т.е. стеки).
    {
        Item* temptop;
        int tempcount;
        temptop=this->top;
        tempcount=this->count;
        this->top=st.top;
        this->count=st.count;
        st.top=temptop;
        st.count=tempcount;
    }
    void KStack::push (int d)//добавляет новый элемент в стек
    {
        Item* temp=new Item;
        temp->data=d;
        temp->next=top;
        top=temp;
    }
    void KStack::pop () //удалить верхний элемент стека
    {  
        Item* temp=top;
        if(IsEmpty()==false)
        {
            top=top->next;
            delete temp;
        }
    }
    void KStack::print()// вывод стека
    {
        Item* p=top;
        while(p!=NULL)
        {
            cout<<p->data<<' ';
            p=p->next;
        }
    }
В общем: написать написал, а работать не хочет, в частности есть подозрение на неправильный конструктор копирования класса KStack. Помогите пожалуйста исправить ошибки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 18:23     Стек, необходима доработка программы.
Посмотрите здесь:

Доработка программы (Подсчет количества слов в строке) C++
C++ Требуется доработка программы.
C++ Доработка программы
C++ Маленькая доработка программы
Необходима проверка кода программы C++
Доработка программы: вставка switch C++
Доработка программы с++ C++
Доработка программы с++ C++

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

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

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