Cтек |
Стек - одна из полезных структур данных. Для стека характерны такие операции как вставлять и удалять данные, но выпалняются они только над самым верхним элементом(вершиной стека). Такой порядок называется "первым вошел, последним вышел".
Реалезуем стек для хранения символьных значений(букв), с помощью структуры и нескольких функций. Для хранения данных мы создадим структуру 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; } |