Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > класс стек (stack) - помогите


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

очень прошу.. пожалуйста..
заранее благодарю.

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

Автор: ManiaK 7.6.2005, 14:48
Батенька, сначала правила читать надо!..
Вот сейчас придёт злой модер и.... smile

Автор: mazepa 7.6.2005, 15:35
bel_nikita пробовал.. не получилось


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


извеняюсь конечно что может и нарушил ваш покой..
оффтоп выше.. не лучше..

Автор: ManiaK 7.6.2005, 15:52
Срочно не срочно, а правила надо соблюдать.

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


Я думаю там даже быстрее тебе ответили бы..

Автор: bel_nikita 7.6.2005, 19:26
Сильно заморачиваться не стал, ну там шаблоны и все такое 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);
}

Автор: mazepa 7.6.2005, 19:50
ManiaK буду знать на будущее

bel_nikita спасибо smile

не отказался бы еще от нескольких кодов

Автор: sergejzr 7.6.2005, 19:58
Вот ещё с безграничным кол-вом елементов 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;
}

Автор: mazepa 8.6.2005, 08:38
всем огромное спасибо, выручили. smile

Автор: Antoninio 14.11.2008, 18:28
Я так понимаю, этот стек работает только с 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 

Помогите пожалуйста)

Автор: UniBomb 14.11.2008, 18:32
я подозреваю что дело вот в этой строчке:

Код

 cin>>a;


Ведь если ты вводиш число, например 56, то (т.к. у нас чар) оно интерпритируется как символы '5' и '6'..

Автор: sergejzr 14.11.2008, 18:39
проблема только в выводе

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


Автор: Kallikanzarid 15.11.2008, 16:35
Это не сессия - скорее урок творчества в детском сау.

Автор: Miha90 16.11.2008, 17:26
Цитата(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. автор, можешь и этот код взять, тоже стек используется. ;)

Автор: Miha90 16.11.2008, 17:46
Всем спасибо. Разобрался.

Автор: Antoninio 16.11.2008, 19:40
sergejzr, 
попробовал - выводит всегда одно и тоже: %ё  smile 

Сорри, ступил, все работает smile

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