Треба Переробити Програму

Тема в разделе "Java", создана пользователем vovik92, 5 мар 2012.

  1. vovik92

    vovik92 Гость

    У цій програмі використовується цільвий клас Stack а мені треба переробити під Set поможіть будь-ласка
    #include <string>
    #include <iostream>
    using namespace std;
    template <class Type>
    class Stack
    {
    private:
    struct node
    {
    Type item;
    node *next;
    node *prev;
    node(Type x,node *p)
    {
    item=x;
    next=0;
    prev=p;
    }
    }typedef node, *link;
    link head;
    link end;
    public:
    class Empty
    {
    };
    class NotElement
    {
    };
    Stack(Type s)
    {
    head=new node(s,0);
    end=new node(s,head);
    head->next=end;
    }
    void add(Type it)
    {
    link newnode=new node(it,0);
    end->prev->next=newnode;
    newnode->prev=end->prev;
    end->prev=newnode;
    newnode->next=end;
    }
    void remove(Type it)
    {
    if (head->next==end && end->prev==head) throw Empty();
    bool p=false;
    for (link l=head->next;l!=end;l=l->next)
    {
    if (l->item==it)
    {
    l->prev->next=l->next;
    l->next->prev=l->prev;
    p=true;
    }
    }
    if (!p) throw NotElement();
    }
    void show()
    {
    if (head->next==end && end->prev==head) throw Empty();
    for (link l=head->next;l!=end;l=l->next)
    cout<<l->item<<" ";
    cout<<endl;
    }
    };
    int main()
    {
    setlocale(0,"Rus");
    while (true)
    {
    int t;
    system("cls");
    cout<<"1) Список для типу String"<<endl;
    cout<<"2) Список для типу int"<<endl;
    cout<<"3) Список для типу double"<<endl;
    cout<<"0) Вихiд\n\t\t\t"<<endl;
    cin>>t;
    if (t==0) break;
    switch (t)
    {
    case 1:
    {
    cout<<"Реалиiзацiя списку для типу string"<<endl;
    Stack<string> mylist("0");
    while (true)
    {
    system("cls");
    int r;
    cout<<"1) Додати елемент"<<endl;
    cout<<"2) Видалити елемент за значенням"<<endl;
    cout<<"3) Показати список"<<endl;
    cout<<"0) Вихiд"<<endl;
    cin>>r;
    if (r==0) {break;}
    switch &reg;
    {
    case 1:
    {
    string st;
    cout<<"Введiть елемент"<<endl;
    cin>>st;
    mylist.add(st);
    system("pause");
    continue;}
    case 2:
    {
    string st;
    cout<<"Введiть значенння елементу"<<endl;
    cin>>st;
    try
    {mylist.remove(st);}
    catch (Stack<string>::Empty)
    {cout<<"ПОМИЛКА!!!! Ви намагались видалити елемент з пустого списку"<<endl;}
    catch(Stack<string>::NotElement)
    {cout<<"Елемента не iснуE"<<endl;}
    system("pause");
    continue;
    }
    case 3:
    {
    try
    {mylist.show();}
    catch(Stack<string>::Empty)
    {cout<<"Список пустий"<<endl;}
    system("pause");
    continue;}}}
    continue;}
    case 2:
    {
    cout<<"Реалiзацiя списку для типу int"<<endl;
    Stack<int> mylist(0);
    while (true)
    {
    system("cls");
    int r;
    cout<<"1) Додати елемент"<<endl;
    cout<<"2) Видалити елемент за значенням"<<endl;
    cout<<"3) Показати список"<<endl;
    cout<<"0) Вихiд"<<endl;
    cin>>r;
    if (r==0) {mylist.~Stack();break;}
    switch &reg;
    {
    case 1:
    {
    int st;
    cout<<"Введiть елемент"<<endl;
    cin>>st;
    mylist.add(st);
    system("pause");
    continue;}
    case 2:
    {
    int st;
    cout<<"Введiть значенння елемента"<<endl;
    cin>>st;
    try
    {mylist.remove(st);}
    catch (Stack<int>::Empty)
    {cout<<"ПОМИЛКА!!!! Ви намагались видалити елемент з пустого списку"<<endl;}
    catch(Stack<int>::NotElement)
    {cout<<"Елементу не iснуЕ"<<endl;}
    system("pause");
    continue;}
    case 3:
    {
    try
    {mylist.show();}
    catch(Stack<int>::Empty)
    {cout<<"Список пустий"<<endl;}
    system("pause");
    continue;}}}
    continue;}
    case 3:
    {cout<<"Реалiзацiя спискe для типу double"<<endl;
    Stack<double> mylist(0.0);
    while (true)
    {
    system("cls");
    int r;
    cout<<"1) Додати елемент"<<endl;
    cout<<"2) Видалити елемент за значенням"<<endl;
    cout<<"3) Показати список"<<endl;
    cout<<"0) Вихiд"<<endl;
    cin>>r;
    if (r==0) {mylist.~Stack();break;}
    switch &reg;
    {
    case 1:
    {
    double st;
    cout<<"Введiть елемент"<<endl;
    cin>>st;
    mylist.add(st);
    system("pause");
    continue;
    }
    case 2:
    {
    double st;
    cout<<"Введiть значення елементу"<<endl;
    cin>>st;
    try
    {mylist.remove(st);}
    catch (Stack<double>::Empty)
    {cout<<"ПОМИЛКА!!!! Ви намагались видалити елемент з пустого списку"<<endl;}
    catch(Stack<double>::NotElement)
    {cout<<"Елементу не iснуE"<<endl;}
    system("pause");
    continue;}
    case 3:
    {
    try
    {mylist.show();}
    catch(Stack<double>::Empty)
    {cout<<"Список пустий"<<endl;}
    system("pause");
    continue;}}}
    return 0;}}}}
     

Поделиться этой страницей