- •Void main()
- •Void main ( )
- •Void PrintList(void(*fpr)(void*)); //вы-вод, fpr – функция обработки элементов списка
- •Int CountList(); //подсчет колич. Элементов
- •Int Object ::CountList()
- •Void Object :: PrintList(void(*fpr)(void*))
- •Void fpr(void* e)
- •Void main()
- •Int _tmain(int argc, _tchar* argv[])
- •Int year;
- •Int _tmain(int argc, _tchar* argv[])
- •Void Object :: PrintList(void(*fpr)(void*))
- •Void PrintList(void(*fpr)(void*));
- •If (!isStackEmpty(top))
- •Void main()
- •Int count;
- •Void main()
- •If (!isStackEmpty(s))
- •If (!isStackFull(s))
- •If (!isStackEmpty(s))
- •Void main()
- •If(Stmy )
- •Void main()
- •Void Push(stack **pSt, void* val)
- •Int Head;
- •Int DeQueue(queue &q)
- •Void EnQueue(queue **ppQu, void* val)
- •Void* DeQueue(queue **ppQu, int nEr )
- •Void Clear(queue **ppQu)
- •Void PrnQ(queue **ppQu)
- •Void main()
If (!isStackEmpty(top))
x = St[top--];
return x;
}
При добавлении элемента индекс массива изменяется так, чтобы он указывал на следующий свободный элемент.
Элемент записывается на место, определяемое индексом.
bool Push(char val) //добавить элемент в стек
{ bool r = true;
if (r =! isStackFull(top))
St[++top] = val;
return r;
}
Главная функция:
Void main()
{ int i; char m;
Push('1'); Push('2'); Push('3');
Push('4');
for(i = 0; i < top+1; i++)
cout<<St[i]<<' ';
cout<<endl;
m = Pop();
cout<<m<<endl;
}
Реализация стека на основе массива как элемента структуры
Программа, имитирует интерфейс стека, основанного на базе статического массива.
#include <iostream>
using namespace std;
const int n = 3;
struct Stack { int A[n];
Int count;
};
void Creation(Stack *p) //создание стека
{ p -> count = 0; }
int Full(Stack *p) //проверка стека на пустоту
{ if (p -> count == 0) return 1;
else if (p -> count == n) return -1;
else return 0;
}
void Add(Stack *p) //добавление элемента
{ int value; cout<<"Введите элемент > ";
cin>>value;
p->A[p -> count] = value; p -> count++;
}
void Delete(Stack *p) //удаление элемента
{ p -> count--;
}
int Top(Stack *p) //извлеч. элемента с вершины
{ return p -> A[p -> count - 1]; }
int Size(Stack *p) //размер стека
{ return p -> count; }
Void main()
{ setlocale(LC_ALL,"Russian");
Stack s;
Creation(&s); char n;
do
{ cout<<"1. Добавить элемент"<<endl;
cout<<"2. Удалить элемент"<<endl;
cout<<"3. Вывести верхний элемент"<<endl;
cout<<"4. Узнать размер стека"<<endl;
cout<<"0. Выйти"<<endl;
cout<<"Номер команды > "; cin>>n;
switch (n)
{ case '1': if (Full(&s)==-1)
cout<<endl<<"Стек заполнен\n";
else
{ Add(&s);
cout<<endl<<"Элемент добавлен\n"; }
break;
case '2': if (Full(&s)==1)
cout<<endl<<"Стек пуст\n";
else
{ Delete(&s);
cout<<endl<<"Элемент удален\n"; }
break;
case '3': if (Full(&s)==1)
cout<<endl<<"Стек пуст\n";
else
cout<<"Верхний элемент: "<<Top(&s)<< "\n";
break;
case '4': if (Full(&s)==1)
cout<<endl<<"Стек пуст\n";
else
cout<<"Размер стека: "<<Size(&s)<<"\n";
break;
case '0': break;
default: cout<<endl<<"Команда не определена\n\n"; break; }
}
while(n != '0');
}
Представление стека динамическим массивом
Можно организовать стек на базе массива, который изменяется динамически.
Пусть стек представлен в виде структуры:
#include <iostream>
using namespace std;
#define MYSTACK_ESE 0x000 //возврат в случае пустоты стека
struct Stack
{ int Top; //вершина стека
int Size; //размер стека
void** Data; //данные стека
};
Stack CreateStack(int n) //выделить ресурс для стека размером n
{ Stack *s = new Stack;
s -> Top = -1; s -> Size = n;
s -> Data = new void*[n];
return *s;
}
bool isStackFull(const Stack &s)// стек заполнен ?
{ return (s.Top >= s.Size - 1);
}
bool isStackEmpty(const Stack &s)// стек пуст ?
{ return (s.Top < 0);
}
void* Pop(Stack &s) // извлечь элемент с вершины стека
{ void* r = (void*)MYSTACK_ESE;