Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Borland С++]из дин. дека в дин. стек


Автор: mego4el 5.7.2011, 00:00
Доброй ночи. Никак не получается сделать из динамического дека - стек. Помогите разобраться где именно и что необходимо изменить, что бы получился дин. стек.

Код

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);
}

Автор: mego4el 7.7.2011, 13:41
хелп плз!

Автор: taiven 8.7.2011, 15:07
Код
#include <stdio.h>
#include <stdlib.h>

typedef struct Item* pItem;
struct Item
{
    int data;
    pItem next;
};
 
//-------------
void push(pItem* stackp, int data)
{
    pItem newp = (pItem)malloc(sizeof(struct Item));
    newp->data = data;
    newp->next = *stackp;
    *stackp = newp;
}
 
//-------------
void pop(pItem* stackp)
{
    pItem p = (*stackp)->next;
    free(*stackp);
    *stackp = p;
}

// --- пример использования ---
int main()
{
    int i;
    pItem stackp = NULL;
 
    for(i = 1; i <= 10; ++i) push(&stackp, i);
 
    while(stackp)
    {
       printf("%d\n", stackp->data);
       pop(&stackp);
    }
 
    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)