// СТЕК символьных строк
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