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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая память : стек, Помогите пожалуйста разобраться ... 
:(
    Опции темы
VerLinG
Дата 11.4.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Я в С++ новичок, очень нужно быстро решить одну проблему  Необходимо написать стек, число элементов которого - параметр класса, неодходимо написать методы которые добавляли, удаляли и выводили на экран содержимое стека ... Реализовать собсно это надо через классы, то есть сте из объектов должен быть...Помогите пожалуйста, я совсем совсем не понимаю это (((
PM MAIL   Вверх
opjox
Дата 11.4.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если это не учебная задача, то используй шаблонный класс std::stack. Если учебная, то надо учиться, т.е. разбираться. 

Поэтому, вопросы, неработующий код и прочее – в студию. В добавок, неужели гугль не выдал ни одного байта кода?

PM MAIL ICQ   Вверх
VerLinG
Дата 11.4.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я нашел один пример, но он заточен под структуры...Вот как это сделать через классы непонятно мне( 

Код

struct Node{
int left,right;
Node *p;

}

Node *top=0;

Node *push(Node *top,const int l,const int r){
Node *pv=new Node;
pv->left=l;
pv->right=r;
pv->p=top;
return pv;

}

Node *pop(Node *top,int l,int r){
Node *pv=top-> p;
l=top->left;
r=top->right;
delete top;
return pv;
}



Вот как из этого сделать стек для классов? Да еще так, чтобы колличество элементов было параметром класса!
PM MAIL   Вверх
Romati
Дата 11.4.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 23.3.2008
Где: Беларусь, Минск

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



Вот похожую задачку со стеками я решал на лабах в институте. Задавай вопросы, обяъсню что и как.

Код

#include<iostream.h>
#include<string.h>
class a
{
public:     
     char fio[30];
     int god;
     a* Next;
};

void add(a **begin)
{
     a *temp;
     temp=new a;
     cout<<"Vvedite fio: "; cin>>temp->fio; 
     cout<<"Vvedite god: "; cin>>temp->god;
     temp->Next=*begin;
     *begin=temp;
}

void print(a *begin)
{
     while(begin!=NULL)
     {     
          cout<<begin->fio<<" "<<begin->god<<endl;
          begin=begin->Next;
     }
}

void del(a **begin)
{
     char f[30];
     cout<<"Vvedite familiyu udalyaemogo: "; cin>>f;
     a *pred, *h;
     h=*begin;
     while(h!=NULL)
     {
          if(!strcmp(h->fio,f))
               if(h==*begin)
               {
                    *begin=(*begin)->Next;
                    delete h;
                    return;
               }
               else 
               {
                    pred->Next=h->Next;
                    delete h;
                    return;
               }
          else
          {
               pred=h;
               h=h->Next;
          }
     }
}

void main()
{ 
     a* begin;
     begin=NULL;
     int ch;
     while(true)
     {
          cout<<"Ch-? "; cin>>ch;
          switch(ch)
          {
          case 1: add(&begin); break;
          case 2: print(begin); break;
          case 3: return;
          case 4: del(&begin); break;
          default: cout<<"Error, repeat: 1,2 or 3";
          }
     }
}

PM MAIL ICQ   Вверх
opjox
Дата 12.4.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Romati, разницы от варианта со структурами практически 0.

VerLinG, вот теперь осталось только обернуть это. Определение класса будет примерно таким: 


Код

class CStack {
private:
  Node * top_;
  int max_elem_, // максимальное кол-во
      now_elem_; // кол-во элементов сейчас

public:
  CStack(const int max_elem) {max_elem_=max_elem; now_elem_=0; top_=0;}
  ~CStack(); // удаляем оставшиеся элементы

  //pop();  их опишешь как тебе нужо
  //push();

  // можно также реализовать и другие функции, например, free(), resize() etc.
};

PM MAIL ICQ   Вверх
Romati
Дата 12.4.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 23.3.2008
Где: Беларусь, Минск

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



opjox, А ты что такой бэтман. Автор попросил вариант со стеками, а ты ему структуры подсунул. Засунь себе их в папку подальше ;)

PM MAIL ICQ   Вверх
opjox
Дата 12.4.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Romati @  12.4.2008,  20:20 Найти цитируемый пост)
ты ему структуры подсунул


Где? Node * top_ что ли?
На С++ варианты:

Код

struct Node {
  int i, j;
};

и
Код

class Node {
public:
  int i, j;
};

практически эквивалентны.
PM MAIL ICQ   Вверх
jonie
Дата 13.4.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Код

typedef class st{ //структура элемента хранения
public:
    char ch; //элемент списка
    class st *prev; // указатель на элемент хранения
}STACK,*PSTACK;


void push(PSTACK *head, char value)
{
    PSTACK newItem = new STACK;
    newItem->ch=value;
    newItem->prev = *head;
    *head = newItem;
}

bool pop(PSTACK* head, char* value)
{
    if(!(*head)) return false;

    *value = (*head)->ch;
    PSTACK last = *head;
    *head = (*head)->prev;
    delete last;
    return true;
}

//уничтожение стека
//void dispose(PSTACK* head)
//{
//    char ch;
//    while(pop(head,&ch));
//}

bool removeByValue(PSTACK* head, char value)
{
    PSTACK cur = *head;
    PSTACK prev;

    //проверка что это головной элемент
    if((*head)->ch == value)
    {
        *head = (*head)->prev;
        delete cur;
        return true;
    }

    while(1)
    {
        prev = cur;
        cur = cur->prev;
        if(!cur) break;            //если мы дошли до конца стека (cur указывает за стек, prev на первый элемент)
        if(cur->ch == value)
        {
            prev->prev = cur->prev;
            delete cur;
            return true;
        }
    }
    return false;    //error
}

int _tmain(int argc, _TCHAR* argv[])
{
    PSTACK head = NULL; // указатель на начало списка
    for (int i=0;i<26;++i)
    {
        push(&head, 'A'+i);
    }
    char ch = 0;
    printf("symbol?>");
    scanf("%c",&ch);

    removeByValue(&head, ch);

    //пока в стеке что-то есть делаем:
    //1.выдавливаем один жлемент
    //2. печатаем его
    //как только стек пуст pop() вернет FALSE, и мы выйдем из цикла
    while(pop(&head, &ch))
    {
        printf("%c",ch);
    }
    printf("\n");
    system("PAUSE");
    return 0;
}


вчера девчонке объяснял накатал примерчик небольшой. может поможет.
struct->class заменил, конечно 8)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
susanin
Дата 14.4.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



могу еще предложить вариант со связанным списком.... с его помощью стек тоже можно реализовать...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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