Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Оператор switch (переключатель)

операторы

Пример (калькулятор на 4 действия)

#include <iostream.h>

void main()

{

int a, b, res;

char op;

cin>>a>>b>>op;

int f=1;

switch (op) {

case’+’: res=a+b; break;

case’-‘: res=a-b; break;

……………………….

default: cout<<”\nНеизвестная операция”;

f=0;

}

if(f) cout<<”\nРезультат: “<<res;

}

Динамические структуры данных

Наиболее часто в программах используются массивы, структуры и их сочетание, например, массивы структур, элементами (полями) которых являются массивы и структуры.

Память под такие данные выделяется либо на этапе компиляции (в этом случае необходимый объем памяти известен до начала выполнения программы, т.е. задан в виде константы), либо во время выполнения программы с помощью операции new или функции malloc (необходимый объем памяти должен быть известен до распределения памяти). В обоих случаях выделяется непрерывный участок памяти.

Если до начала работы с данными невозможно определить, сколько памяти потребуется для их хранения, т.е. объем данных неизвестен, то память выделяется по мере необходимости отдельными блоками, связываемыми друг с другом с помощью указателей. Такой способ организации данных называется динамическими структурами данных, поскольку их размер изменяется во время выполнения программы. В общем случае динамическая структура занимает несмежные участки ОП.

Из динамических структур чаще всего используются стеки, очереди, списки и бинарные деревья.

Элемент любой динамической структуры представляет собой структуру, содержащую как минимум два поля: для хранения данных и для указателя.

struct Node {

Data d; // тип данных должен быть определен ранее

Node* p;

};

В общем случае полей данных и указателей может быть несколько. Поля данных могут быть любого типа: основного, составного или типа указатель.

Стек

Добавление элементов и выборка элементов выполняется из вершины стека. Другие операции со стеком не определены. Можно ещё прочитать данные в элементе на вершине стека без выборки. При выборке элемент исключается из стека. Стек реализует принцип обслуживания LIFO (last in, first out – последним пришел, первым ушел).

Примечание. Область оперативной памяти под локальные переменные выделяется по принципу LIFO. Поэтому эта область и названа стеком. Стеки широко применяются в системном программном обеспечении, компиляторах, в рекурсивных алгоритмах.

Пример. Программа формирует стек из 5 чисел (1, 2, 3, 4, 5) и выводит его на экран. Функцию помещения в стек называют push (вталкивать), а выборки – pop (выталкивать). Указатель для работы со стеком (top) всегда ссылается на его вершину.

//--------------------------------------------------------------------------------------

#include <iostream.h>

struct Node{

int d;

Node* p;

};

//---------------------------------------------

Node* first(int d);

void push(Node** t, int d);

int pop(Node** t);

//----------------------------------------------

void main()

{ Node* top = first(1);

for(int i=2; i<6; i++) push(&top, i);

while(top)

cout<<pop(&top)<<’ ‘;

}

//------------------------------------------------

На экране: 5 4 3 2 1

//------------------------------------------------

//Начальное формирование стека

Node* first(int d){

Node* pv=new Node;

pv->d=d;

pv->p=0;

return pv;

}

//----------------------------------------------------------------------

// Занесение в стек

void push(Node** t, int d)

{ Node* pv=new Node;

pv->d=d;

pv->p=*t;

*t=pv;

}

0

//---------------------------------------------------------------------------------------

// Выборка из стека

int pop(Node** t)

{ int z=(*t)->d;

Node* pv=*t;

*t=(*t)->p;

delete pv;

return z;

}