// СТЕК  символьных строк

 

 class stack

{

  private:

     char st[55];   // массив для хранения элементов стека

     int  ptr;      // указатель номера СЕДУЮЩЕГО свободного места в массиве

     int  max_ptr;  // максимальный размер стека

     char buf[110];  // для организации печати информации о состоянии стека

  public:

     stack();            // конструктор

     ~stack();           // деструктор

     void push(char c);  // метод - поместить в стек

     char pop();         // метод - взять из стека ('\0' - если стек пуст)

     char look();        // метод - посмотреть что в вершин стека ('\0' - если стек пуст)

     char * pr();        // метод - вернуть символьную строку - элементов в стеке

     void prln();        // метод -  распечатать стек

};

stack::stack()            // конструктор

     {

      max_ptr=55;

      ptr=0;

      for(int i=0; i< max_ptr; i++) st[i]='\0';

     };

stack::~stack()          // деструктор

     {

      ptr=0;

      for(int i=0; i< max_ptr; i++) st[i]='\0';

     };

void stack::push(char c)   // метод - поместить в стек

     {

      if ( (ptr+1) > max_ptr)

      { printf("*** переполнение стека ***\n");

        exit(666);

      };

      st[ptr++]=c;

      return;

     };

char stack::pop()    // метод - взять из стека ('\0' - если стек пуст)

    {

      char cc;

      if (ptr < 0 ) return '\0';

      ptr--;

      cc=st[ptr];

      st[ptr]='\0';

      return cc;

    };

 

char stack::look()      // метод - посмотреть что в вершин стека ('\0' - если стек пуст)

    {

     char cc;

     int t_ptr;

     t_ptr=ptr-1;

     if ( t_ptr < 0 ) return '\0';

     cc = st[t_ptr];

     return cc;

    };

 

char *stack::pr()  // метод - вернуть символьную строку - элементов в стеке

    { int i;

      int j=0;

      buf[j++]=':'; buf[j++]=' ';

      for (i= (strlen(st)-1); i >= 0;  i-- )

       {     

         buf[j++]=st[i];

         buf[j++]=' ';

       };

      buf[--j]='\0';

      //sprintf(buf,": %s ",st);

      return buf;

    };

 

void stack::prln()    // метод -  распечатать стек

    { printf("%s\n", pr() );

      return;

    };

=====================================================================

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//#include "stack.h"

void main(int argc, char * argv[])

{

  stack st;

  st.prln();

 

  st.push('1'); st.prln();

  st.push('2'); st.prln();

  st.push('3'); st.prln();

  st.push('4'); st.prln();

  char

  z=st.pop();

  printf("===>pop ===> %c \n",z);

  st.prln();

  z=st.pop();

  printf("===>pop ===> %c \n",z);

  st.prln();

  z=st.look();

  printf("===>look===> %c \n",z);

  st.prln();

  printf("*********** %s\n",st.pr());

 return;

};

C:\Test\cpp\bsu-stack>test.exe

:

: 1

: 2 1

: 3 2 1

: 4 3 2 1

===>pop ===> 4

: 3 2 1

===>pop ===> 3

: 2 1

===>look===> 2

: 2 1

*********** : 2 1