Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

из дин. дека в дин. стек (Borland С++)

35K
05 июля 2011 года
life4fun
64 / / 15.11.2010
Доброй ночи. Никак не получается сделать из динамического дека - стек. Помогите разобраться где именно и что необходимо изменить, что бы получился дин. стек.

Код:
TForm1 *Form1;
struct Dek
{
    int data;
    Dek * next;
    Dek * prev;
};
Dek * l=NULL;
Dek * r=NULL;
int el_kol=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//----------------------------------------------------------------------------
void add(int side, int el)
{
    Dek* t;
    t=new Dek;
        t->data=el;
    if (!l||!r)
    {
        l=t;
        l->next=NULL;
        l->prev=NULL;
        r=l;
        return;
    }
    if(side==0)
    {
        t->next=l;
        t->prev=NULL;
        l->prev=t;
        l=t;
    }
    if(side==1)
    {
        r->next=t;
        t->prev=r;
        t->next=NULL;
        r=t;
    }
}
//-----------------------------------------------------------------
void del (int side, TLabel* Label)
{
    Dek* t;
    if(!l||!r)
    {
        ShowMessage("Дек пустой, удаление невозможно.");
        return;
    }
    if(side==0)
    {
        t=l;
        l=l->next;
        if(l)
            l->prev=NULL;
                else
                        r=NULL;
                Label->Caption="Извлечено: "+IntToStr(t->data);
        delete t;
    }
    if(side==1)
    {
        t=r;
        r=r->prev;
        if(r)
            r->next=NULL;
                else
                        l=NULL;
        Label->Caption="Извлечено: "+IntToStr(t->data);
        delete t;
    }
        el_kol--;
}
//-----------------------------------------------------------------
void el_print(TMemo* Memo)
{
Dek* t;
t=l;
Memo->Clear();
if(t)
{
        while(t)
        {
        Memo->Lines->Add(IntToStr(t->data));
        t=t->next;
        }
}
else
Memo->Lines->Add("<Дек пуст>");
}
//-----------------------------------------------------------------
void __fastcall TForm1::BtAddClick(TObject *Sender)
{
int el;
try
{
        el=StrToInt(MEdAdd->Text);
}
catch(...)
{
        ShowMessage("Вы ввели недопустимое значение.");
}

add(RgAdd->ItemIndex, el);
el_kol++;
LbAmount->Caption=IntToStr(el_kol);
el_print(MemElList);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::BtDelClick(TObject *Sender)
{
del(RgDel->ItemIndex, LbDeleted);
LbAmount->Caption=IntToStr(el_kol);
el_print(MemElList);
}
247
05 июля 2011 года
wanja
1.2K / / 03.02.2003
Убрать *prev, и добалять и вынимать толко в начале.
35K
06 июля 2011 года
life4fun
64 / / 15.11.2010
можно подробнее пожалуйста!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог