Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Borland С++]из дин. дека в дин. стек 
:(
    Опции темы
mego4el
Дата 5.7.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.9.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);
}

PM MAIL   Вверх
mego4el
Дата 7.7.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.9.2010

Репутация: нет
Всего: нет



хелп плз!
PM MAIL   Вверх
taiven
Дата 8.7.2011, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



Код
#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;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.