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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс стек (stack) - помогите, написать код 
:(
    Опции темы
mazepa
Дата 7.6.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно написать на BC++ 3.1 (DOS)
программу с классом стек (stack) не важно на какую тематику.. вообщем любую
желательно не сильно большую.. пригодятся любые иходники с этим классом.

очень прошу.. пожалуйста..
заранее благодарю.
PM MAIL   Вверх
bel_nikita
Дата 7.6.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Эх, сессия, сессия... smile
А поиском воспользоваться не пробывал? Недавно обсуждали


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
ManiaK
Дата 7.6.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Батенька, сначала правила читать надо!..
Вот сейчас придёт злой модер и.... smile
PM MAIL WWW   Вверх
mazepa
Дата 7.6.2005, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bel_nikita пробовал.. не получилось


ManiaK да я понимаю что есть правила.. но тут срочно очень надо


извеняюсь конечно что может и нарушил ваш покой..
оффтоп выше.. не лучше..
PM MAIL   Вверх
ManiaK
Дата 7.6.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Срочно не срочно, а правила надо соблюдать.

Цитата
ожалуйста, не просите написать программ за вас в этом разделе, для этого существует Центр Помощи!


Я думаю там даже быстрее тебе ответили бы..
PM MAIL WWW   Вверх
bel_nikita
Дата 7.6.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Сильно заморачиваться не стал, ну там шаблоны и все такое smile Я думаю этих исходников хватит smile
Вот, примитивный стек хранящий int'ы-ыыы smile Ну, если попросят усложним наш класс.
Код

class cStack
{
public:
  cStack(size_t count = 100):m_MaxCount(count),m_CurrentPosition(0)
  {
    m_pBuffer = new int[count];
    memset(m_pBuffer,0,sizeof(int)*count);
  }
  ~cStack()
  {
    delete m_pBuffer;
  }

  int Put(int Item)
  {
    if ( m_CurrentPosition + 1 >= m_MaxCount ) return -1;  // stack is full

    *(m_pBuffer + m_CurrentPosition++) = Item;
    return 0;
  }

  int Get(int& Item)
  {
    if ( !m_CurrentPosition ) return -1; // stack is empty
    Item = *(m_pBuffer + --m_CurrentPosition);
    return 0;
  }

protected:
private:
  int*    m_pBuffer;  // ptr on buffer
  size_t  m_MaxCount; // count of max elements
  size_t  m_CurrentPosition; // current position in bufeer
  
};

int main(int argc, char* argv[])
{
  printf("\nHello World!\n");

  cStack Stack;

  Stack.Put(0xAAAA);
  Stack.Put(0xBBBB);
  Stack.Put(0xCCCC);

  printf("\nStack.GetCount() = %d",Stack.GetCount());

  int data = 0;
  Stack.Get(data);
  printf("\n %04X",data);
  Stack.Get(data);
  printf("\n %04X",data);
  Stack.Get(data);
  printf("\n %04X",data);
  Stack.Get(data);
  printf("\n %04X",data);
}


Это сообщение отредактировал(а) bel_nikita - 7.6.2005, 19:28


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
mazepa
Дата 7.6.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ManiaK буду знать на будущее

bel_nikita спасибо smile

не отказался бы еще от нескольких кодов
PM MAIL   Вверх
sergejzr
Дата 7.6.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Вот ещё с безграничным кол-вом елементов smile
Не проверял на вшивость, но должен работать.
Код


#include "stdio.h"
template <class Any> 
struct stack_node
{
Any element;
stack_node *next;
};
template <class Any> 
class Stack
{
    stack_node<Any> * first;
public:
    Stack()
    {
        first=0;
    }
    void push(Any element)
    {
        stack_node<Any> * next=new stack_node<Any>;
        next->next=first;
        first=next;
        first->element=element;
    }
    Any top()
    {
        return first->element;
    }
    Any pop()
    {
        Any ret=first->element;
        stack_node<Any> * next=first->next;
        delete first;
        first=next;
        return ret;
    }
    bool empty()
    {
        return first==0; 
    }
    ~Stack()
    {
        
        while(first!=0)
        {
            stack_node<Any> * begunok=first->next;
            delete first;
            first=begunok;
        }

    }
};



int main()
{
    Stack<int> *s=new Stack<int>();

    for(int i=0;i<1234;i++)
        s->push(i);
    while(!s->empty())
    printf("%i\n",    s->pop());

    return 0;
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
mazepa
Дата 8.6.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



всем огромное спасибо, выручили. smile
PM MAIL   Вверх
Antoninio
Дата 14.11.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я так понимаю, этот стек работает только с int, а как сделать, чтобы он хранил char?
Я изменил только главную часть проги:
Код

int main()
{
    Stack<char> *s=new Stack<char>();
    char a;
    cout<<"Vvedite element: ";
    cin>>a;
    s->push(a);
    while(!s->empty())
    printf("%i\n",    s->pop());

    return 0;
}



В результате из стека извлекается все равно число smile 

Помогите пожалуйста)
PM MAIL   Вверх
UniBomb
Дата 14.11.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

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



я подозреваю что дело вот в этой строчке:

Код

 cin>>a;


Ведь если ты вводиш число, например 56, то (т.к. у нас чар) оно интерпритируется как символы '5' и '6'..
PM MAIL ICQ Skype   Вверх
sergejzr
Дата 14.11.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



проблема только в выводе

 printf("%i\n",    s->pop());
надо
 printf("%c\n",    s->pop());




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Kallikanzarid
Дата 15.11.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Это не сессия - скорее урок творчества в детском сау.
PM MAIL   Вверх
Miha90
Дата 16.11.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(sergejzr @ 14.11.2008,  18:39)
проблема только в выводе

 printf("%i\n",    s->pop());
надо
 printf("%c\n",    s->pop());

А как тоже самое в cout сделать?
например у меня тоже лаба, нужно вывести строки файла в обратном порядке.
Код

#include <iostream>
#include <fstream>
#include <stack>

using namespace std;
int main() {
    ifstream in ("int.txt");
    stack<char> s;
    char word;
    while (in >> word) s.push(word);
    while (!s.empty()) {
        cout << s.top() << ' ';
        s.pop();
    }
    return 0;
}


Какой тип данных прописывать? 


P.S. автор, можешь и этот код взять, тоже стек используется. ;)
PM MAIL   Вверх
Miha90
Дата 16.11.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем спасибо. Разобрался.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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