Двунаправленные списки

Тема в разделе "C/C++/C#", создана пользователем keeper1, 5 июн 2011.

  1. keeper1

    keeper1 Гость

    Здравствуйте всем!
    Написал программу для составления из одной таблицы другую. Использую двунаправленный список и классы.
    Вопрос в следующем. Не работают две подпрограммы: удаление записи из таблицы и считывание из бинарного файла.
    Подскажите,в чем ошибка,пожалуйста.
    Заранее благодарен
    PS не работает - это значит программа экстренно завершает работу.
    Структуры
    Код (C++):
    struct person
    { char fam[30];
    char im[5];
    int god;
    char mark[30];
    char strana[30];
    };
    struct perech
    { char mark[30];
    int ng;
    };
    struct node1
    { person s;
    node1 *next,*pre;
    };
    struct node2
    { perech g;
    node2 *next,*pre;
    };
    Удаление из таблицы:
    Код (C++):
    void tabl1::Delete(int i)
    { node1 *a,*b,*c;
    int j;
    char ch;
    if(!(i<0||i>=n+1))
    {
    for(j=0,a=beg1;j<(i-1);j++,a=a->next);
    cout<<"Are you sure that you need delete data about "<<a->s.fam<<" "<<a->s.im<<" "
    <<a->s.god<<" "<<a->s.mark<<" (y or n)"<<endl;
    cin>>ch;
    if(ch=='y')
    {if(a==beg1)
    {
    beg1=a->next;
    beg1->pre=NULL;
    delete a;
    n--;
    return;
    }
    if(a==end1)
    {
    end1=a->pre;
    end1->next=NULL;
    delete a;
    n--;
    return;
    }

    b=a->pre;
    c=a->next;
    delete a;
    b->next=c;
    c->pre=b;
    n--;
    }
    }
    else {cout<<"Out of index\n";getch();}
    }
    Считывание из бинарного файла:
    Код (C++):
    int tabl2::InputFileBinPerech()
    {perech t;
    fstream fin;
    char ch[60];
    cout<<"Please enter root to temp Binary file\n";
    cin>>ch;
    fin.open(ch,ios::in|ios::binary);
    if (fin.fail())
    {cout<<"Binary File is not opened.";
    getch();
    fin.close();
    return 1;
    }
    fin.seekg(0,ios::end);
    m=fin.tellg()/sizeof(perech);
    fin.seekg(0,ios::beg);
    del();
    for(;fin.good();)
    {
    fin.read((char*)&t,sizeof(perech));
    if(fin.good()){new_(t);}
    }
    fin.close();
    cout<<"Temp file is read\n";
    getch();
    return 0;
    }
    Вспомогательные подпрограммы:
    Код (C++):
    void tabl2::del()
    {
    node2 *a;
    for(a=beg2;a!=NULL;a=beg2,beg2=a->next,delete a);
    beg2=NULL;
    end2=NULL;
    }

    void tabl2::new_(perech &t)
    {node2 *t_s,*t_n;
    t_n=new node2();
    if(t_n==NULL) {cout<<"Error. Overload memory data.";getch();return;}
    t_s=end2;
    if (t_s == NULL)
    {beg2=new node2;
    beg2->g=t;
    beg2->next=NULL;
    beg2->pre=NULL;
    end2=beg2;
    return;
    }
    t_n->g=t;
    t_s->next=t_n;
    t_n->pre=t_s;
    t_n->next=NULL;
    end2=t_n;
    m++;
    }
     
Загрузка...
Похожие Темы - Двунаправленные списки
  1. gx6060
    Ответов:
    0
    Просмотров:
    263
  2. kingl
    Ответов:
    5
    Просмотров:
    2.252
  3. shilovec5377
    Ответов:
    0
    Просмотров:
    1.186
  4. lmike
    Ответов:
    1
    Просмотров:
    1.868
  5. DNT
    Ответов:
    8
    Просмотров:
    4.018

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