Язык С++ и программирование на нем. Рейзлин В.И. - 148 стр.

UptoLike

Составители: 

150
Результат выполнения программы:
Дядя Вася!
!ясаВ ядяД
Можно решить эту задачу и так:
char str [ ] = Дядя Вася!;
stack s (str, 10);
while (!s.empty ()) cout <<s.pop(); cout <<’\n’;
25.2. Реализация стека через динамическую цепочку
звеньев
Пусть значением указателя, представляющего стек в целом, явля-
ется адрес вершины стека. Как и в случае односвязного списка, каждое
звено будет содержать указатель на следующей элемент, причем «дно»
стека .е. элемент, занесенный в стек раньше всех) содержит указатель
NULL.
// Файл stack.cpp
typedef char ETYPE;
struct elem {
ETYPE data;
elem* next;
elem (ETYPE d, elem* n){ data = d; next = n; }
};
class stack {
elem*h; // Адрес вершины стека.
public:
stack () {h = NULL;} // Создание пустого стека.
stack (ETYPE a [ ], int len){ // Инициализация стека массивом.
h = NULL;
for (int i = 0; i< len; i++) h = new elem (a[i], h);
}
stack (stack & a){ // Инициализация стека другим сте-
ком.
elem *p,*q;
p = a.h; q = NULL;
while (p) { q = new elem (p->data, q);
if (q->next = = NULL) h = q;