Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2011, 21:49   #1
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Вопрос динамические структуры

Доброго вечера. Пожалуйста помогите разобраться с заданием на структуры, и подскажите с чего здесь начинать?

1) Кольцевой двунаправленный список (добавление/удаление в произвольное место списка, отличное от начала (например после звена, указатель на которое задан). Проверка, пуст ли список, очистка списка, печать списка в направлении от верха к низу \ низа к верху.

Необходимо написать программу на С++.

Спасибо всем, заранее!
mego4el вне форума Ответить с цитированием
Старый 04.02.2011, 10:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Открыть любую книгу по структурам данных и списать, как это реализуется. Или посмотреть, как реализзуются списки вообще.
p51x вне форума Ответить с цитированием
Старый 04.02.2011, 10:36   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> печать списка в направлении от верха к низу \ низа к верху

Стесняюсь спросить - и где же у кольца "верх" и "низ" ?)
mss вне форума Ответить с цитированием
Старый 13.02.2011, 00:29   #4
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Вопрос

Собственно вот, что получилось:

Код:
#include <iostream.h>
#include <windows.h>
 
const int NotUsed=system("color F0");
int menu();
 
struct list
{
        char sn[50];  //student name
        int sid;      //student number
        list *next;
        list *prev;
};
 
list *list_end=NULL;          //sozdanie pustogo spiska
list *dobav_nach(list *p);  //dobavit v nachalo
list *udal_nach(list *p);    //udalit iz nachala
list *dobav_proizv(list *p);  //dobavit v proizvolnoe mesto
list *udal_proizv(list *p);  //udalit iz proizvolnogo mesta
void proverka(list *p);     //proverka, pust li spisok
list *clean_list(list *p);    //ochistit spisok
void print(list *p);        //vyiti
 
//------------------------------------------------------------
 
int main()
{
        list *l=NULL;
        bool ex=true;
        while (ex)
        {
                switch(menu())
                {
                case 1:
                        l=dobav_nach(l);
                        break;
                case 2:
                        l=udal_nach(l);
                        break;
                case 3:
                        dobav_proizv(l);
                        break;
                case 4:
                        if (udal_proizv(l)==NULL)
                        l=NULL;
                        break;
                case 5:
                        proverka(l);
                        break;
                case 6:
                        l=clean_list(l);
                        break;
                case 7:
                        print(l);
                        break;
                case 0: ex=false;
                        break;
                default: cout<<"Vyberite punkt!"<<endl;
                        break;
                }
        }
        return 0;
}
 
//-----------------------------------------------
 
int menu()
{
        int m;
        cout<<" --------------------------------"<<endl;
        cout<<" Vyberite punkt: \n\n";
        cout<<" 1 - dobavit v nachalo\n";
        cout<<" 2 - udalit iz nachala\n";
        cout<<" 3 - dobavit v proizvolnoe mesto\n";
        cout<<" 4 - udalit iz proizvolnogo mesta\n";
        cout<<" 5 - proverit, pust li spisok\n";
        cout<<" 6 - ochistit spisok\n";
        cout<<" 7 - pechat spiska\n";
        cout<<" 0 - vyiti\n";
        cout<<" --------------------------------"<<endl<<endl;
    cin>>m;
        return m;
}
 
//-----------------------------------------------
 
list *dobav_nach(list *p)
{
        list *t;
        t=new list;
        cout<<endl<<" Vvedite imya studenta: ";
        cin>>(t->sn);
        cout<<" Vvedite nomer studenta: ";
        cin>>t->sid;
        if(p==NULL)
        {
                list_end=t;
                t->next=t;
                cout<<endl<<" ...Added successfully!\n\n";
        }
        else
        {
        t->next=p;
        list_end->next=t;
        cout<<endl<<" ...Added successfully!\n\n";
        }
        return t;
}
 
//-----------------------------------------------
 
list *udal_nach(list *p)
{
        list *t;
        if(p==NULL)
                cout<<" Spisok pyst!";
        else
        {
                if(p==list_end)
                {
                        delete p;
                        p=NULL;
                        list_end=NULL;
                        cout<<endl<<" ...Deleted successfully!\n\n";
                }
                else
                {
                        t=p;
                        p=p->next;
                        list_end->next=p;
                        delete t;
                        cout<<endl<<" ...Deleted successfully!\n\n";
                }
        }
        return p;
}
 
//-----------------------------------------------
 
list *dobav_proizv(list *p)
{
        int sd;
        list *s,*t;
        if(p==NULL)
                cout<<" Spisok pyst!";
        else
        {
                t=p;
                cout<<endl<<"Vvedite nomer studenta, posle kotorogo budet vstavlen etot: ";
                cin>>sd;
                do
                {
                if(t->sid==sd)
                        {
                        s=new list;
                        cout<<"Vvedite imya studenta: ";
                        cin>>(s->sn);
                        cout<<"Vvedite nomer studenta: ";
                        cin>>s->sid;
                        s->next=t->next;
                        t->next=s;
                        cout<<endl<<" ...Added successfully!\n\n";
                        if(s->next==p)
                        list_end=s;
                        break;
                        }
                t=t->next;
                }
        while(t!=p);
        }
        return s;
}
mego4el вне форума Ответить с цитированием
Старый 13.02.2011, 00:30   #5
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
По умолчанию

продолжение кода:

Код:
list *udal_proizv(list *p)
{
        int sd;
        list *s,*t;
        if(p==NULL)
        cout<<" Spisok pyst!";
        else
        {
                t=p;
                cout<<endl<<"Vvedite nomer studenta, kotoruy budet udalen: ";
                cin>>sd;
        while(t->next!=p)
        {
                if(t->next->sid==sd)
                {
 
                        s=t->next;
                        t->next=s->next;
                        delete s;
                        cout<<endl<<" ...Deleted successfully!\n\n";
                        if(t->next==p)
                        {
                                list_end=t;
                        }
                        break;
                }
                t=t->next;
        }
        }
        return t;
}
 
//-----------------------------------------------
void proverka(list *p)
{
        if(p==NULL)
                cout<<endl<<" Spisok pyst!\n\n";
        else
                cout<<endl<<" Spisok ne pyst!\n\n";
}
 
//-----------------------------------------------
 
list *clean_list(list *p)
{
        list *t;
        if(p==NULL)
                cout<<" Spisok pyst!";
        else
        {
                while(p!=list_end)
                {
                        t=p;
                        p=p->next;
                        delete t;
                }
                delete p;
                p=NULL;
                list_end=NULL;
                cout<<endl<<" ...Cleaned successfully!\n\n";
        }
        return p;
 
}
 
//-----------------------------------------------
 
void print(list *p)
{
        list *t_p=p;
        if(t_p)
        {
                do
                {
                cout<<" ---------------------------"<<endl;
                cout<<" Imya studenta: "<<t_p->sn<<endl;
                cout<<" Nomer studenta: "<<t_p->sid<<endl;
                cout<<" ---------------------------\n\n";
                t_p=t_p->next;
                }
        while(t_p!=list_end->next);
        }
        else
        cout<<" Spisok pyst!\n\n";
}
пожалуйста подскажите, как сделать что бы имя студента можно было записывать с пробелами, а так же что бы номер был максимум 10 символов. и еще интересует, правильно ли вообще составлен "кольцевой двунаправленный список", и что здесь не так?
mego4el вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры в С++ Aleksa_ks Помощь студентам 0 04.05.2010 21:50
динамические структуры Елена Лапуля Помощь студентам 3 04.05.2010 08:57
Динамические структуры!!!! Oooooleg Помощь студентам 4 22.05.2009 14:15