Стек - одна из полезных структур данных. Для стека характерны такие операции как вставлять и удалять данные, но выпалняются они только над самым верхним элементом(вершиной стека). Такой порядок называется "первым вошел, последним вышел".
   Реалезуем стек для хранения символьных значений(букв), с помощью структуры и нескольких функций. Для хранения данных мы создадим структуру stak состоящую из массива s, хранящего наши данные, и переменной top которая будет хранить номер верхнего элемента.

struct stack
{
  char s[1000];
  int top;
};

  Теперь создадим функцию reset задача которой инициализация. В ней нам достачно переменной top присвоить значение -1. В качестве параметра ей будет передоватся указатель на структуру (при использовании указателя для доступа к членам структуры используется не ".", а оператор "->").

 

void reset(stack* st)
{
  st->top = -1;
}

  Так же нам нужны функции push(вставить) и pop(извлечь).

 


void push(stack* st, char s)
{
  ++st->top;
  st->s[st->top] = s;
}
char pop(stack* st)
{
  --st->top;
  return st->s[st->top];
}

  Теперь напишем функцию main, чтобы проверить нашу версию стека, функция будет печатать строку в обратном порядке.

 


main()
{
  char str[] = "My name is Gena";
  int count = sizeof(str);
  stack My_stack;
  reset(&My_stack);
  for(int i = 0; i < count; i++)
  {
    push(&My_stack, str[i]);
  }
  while(My_stack.top != -1)
  {
    cout << pop(&My_stack);
  }
  cout << endl;
}

  Полностью текст программы должен выглядеть так:

  

#include <iostream.h>

struct stack
{
  char s[1000];
  int top;
};

void reset(stack* st)
{
  st->top = -1;
}

void push(stack* st, char s)
{
  ++st->top;
  st->s[st->top] = s;
}

char pop(stack* st)
{
  --st->top;
  return st->s[st->top];
}

main()
{
  char str[] = "My name is Gena";
  int count = sizeof(str);
  stack My_stack;
  reset(&My_stack);
  for(int i = 0; i < count; i++)
  {
     push(&My_stack, str[i]);
  }
     while(My_stack.top != -1)
  {
     cout << pop(&My_stack);
  }
  cout << endl;
}