Стек
Со стеком определены только операции добавления и выборки элементов из вершины стека. При осуществлении выборки элемент исключается из стека. В стеке осуществляется принцип LIFO. Возможен также принцип FIFO. Стеки широко применяются в системном программировании при написании компиляторов и различных рекурсивных алгоритмов.
Пример 1
Пример программы, которая формирует стек из пяти целых чисел, и выводит его на экран:
#include <iostream>
Struct Node
{
int d;
Node *p;
}
Node *first(int d);
void push(Node **top, int d);
void pop(Node **top);
Int main()
{
Node *top = first(1);
for(int i=2; i<6; i++) push(&top, i);
While(top)
cout<<pop(&top)<<" ";
return 0;
}
/* начальное формирование стека */
Node *first (int d)
{
Node *Pv = new Node;
Pv->d=d;
Pv->d=0;
return Pv;
}
/* занесение в стек */
void push(Node **top, int d)
{
Node *Pv = new Node;
Pv -> d = d;
Pv -> p = *top;
*top = Pv;
}
/* выборка из стека */
int pop(Node **top)
{
int temp = (*top) -> d;
Node *Pv = *top;
*top = (*top) -> p;
delete Pv;
return temp;
}
/* вывод: 5 4 3 2 1 */
Очереди
Очередь – абстрактная структура данных, реализует принцип обслуживания FIFO. Это частный случай однонаправленного списка, добавление элементов в который выполняется в один конец, а выборка идет из другого конца. Таким образом, в структуре «очередь» определены две операции: добавление элементов и выборка. При выборке элемент из очереди исключается. В системном программировании очереди используются для диспетчеризации задач моделирования.
|
|
Пример 1
Пример программы, реализующей линейную очередь из пяти элементов, выводя их на экран
Struct Node
{
int d;
Node *p;
}
Node *first(int d);
void add(Node **pend, int d);
int del(Node **pbeg);
Int main()
{
Node *pbeg = first(1);
Node *pend = pbeg;
for(int i=2; i<6; i++) add (&pend, i);
While(pbeg)
cout<<del(&pbeg)<<" ";
return 0;
}
/* начальное формирование очереди*/
Node *first(ind d)
{
Node *pv = new Node;
pv -> d = 0;
pv -> p = 0;
return pv;
}
/* добавление в конец */
void add(Node **pend, int d)
{
Node *pv = new Node;
pv -> d = d;
pv -> p = 0;
(*pend) -> p = pv;
*pend = pv;
}
/* выборка */
int del(Node **pbeg)
{
int temp = (*pbeg) -> d;
Node *pv = *pbeg;
*pbeg = (*pbeg) -> p;
delete pv;
return temp;
}
Результат работы: 1 2 3 4 5
Деревья