Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Infa_ekzamen.doc
Скачиваний:
76
Добавлен:
09.06.2015
Размер:
2.16 Mб
Скачать

8.Статические и динамические переменные,динамическая память,работа с динамическими переменными.

Переменная — именованная область памяти, в которой хранятся данные определенного типа, есть имя и значение; значение переменной можно изменять в ходе выполнения программы,перед использованием переменная должна быть описана.

Статистическая — память, выделенная на основании описания, переменные в ней — Статистические.

Динамическая — память выделенная в процессе выполнения программы, переменные в ней — Динамические.

Каждая статистическая переменная описанная в некотором блоке и обращение к ней осуществляется с помощью ее имени – идентификатора. Обратиться к динамическим переменным можно с помощью указателя на место текущего расположения.

int x=15// статистич. переменная х, в статистич. памяти 4 байта и записано число 15.

int *x х=new(int)//в динамической памяти место для хранения величины целого типа и адрес этой области памяти присвоен указателю х. х – имя указателя и его значение – адрес байта динамической памяти, начиная с которого размещается динамическая переменная .

Создание:1)описание указателя <тип>*<идентификатор>(int*x) и обратится к new.

2)int*x=new(int) или int*x=new int; x=NULL – указатель не ссылается.

После использования динамической переменной ее нужно удалить: delete<имя указателя>

Примеры: 1) int*x=new(int)*y //описаны 2 указат. и создана динамич. переменная Х.

2) *x=10; y=x //указат. У присваиваем знач. указат. Х, т.е имеем 2 указ.

3)*y=7 //изменили содержимое динамической памяти

4)y=NULL //присвоили пустую ссылку

5)cout<<*x //выведено число 7

Пример: int main() { int *x=new(int), y=new(int); int r; *x=10; *y=20; cout<<*x<<”\t”<<*y<<endl; r=*x; *x=*y; *y=r; cout<<*x<<”\t”<<*y<<endl;

delete x; delete y; return 0;}

Динамическая структура: struct stud { string fio; int kurs; stud*next;};

9.Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.

Линейный список — множество, состоящее из n>=0 компонент, структурные свойства которого ограничиваются линейным, одномерным относительным положением компонент: x[1]...x[n]. Если n>0 то x[1]- 1я компонента, x[n]- последняя.

Операции над списками:

1)получить допуск к К-ой компоненте списка

2)включить новую компоненту в список перед К-ой компонентой

3)исключить из списка К-ую компоненту

4)объединить 2 и более списка в один

5)разбить линейный список на 3 и более

6)сделать копию линейного списка

7)определить количество компонент в списке

8)отсортировать компоненты списка по значению некоторых полей

9)найти в списке компоненту с заданным значением некоторого поля

Линейный связанный список — конечное множество компонент, состоящих из 2х частей: информационной (info) и указательной (link).

Однонаправленный список — если link содержит 1 адрес, указывает какая компонента следует за данной.

Двунаправленный список — если 2 адреса.

Линейные последовательности можно представить с помощью массива, т.к. индекс — прямой доступ к любой компоненте.

Стек — линейный список, в котором все включения и исключения и всякий доступ к данным осуществляется с одной стороны.

Описание стека: const int stacksize=100; int stack[stacksize], x, sp;

sp — специальная переменная что бы обратиться к вершине если стек не пуст, то указатель стека sp указывает на 1й элемент массива.

sp=0 – инициализирует стек, делает его пустым.

1) stack [sp]=x; //положить х на вершину стека

sp=sp+1; //указатель стека переместить на следующую компоненту.

2) sp=sp-1; // указатель уменьшаем на 1;

x=stack[sp]; //присваиваем значение последнего элемента в списке.

Другая реализация:

°Положить в стек if (sp=stacksize) cout<<”стек полон”; else {stack[sp]=x; sp=sp+1;};

°Взять из стека if (sp<1) cout<<”стек пуст”; else {sp =sp-1; x=stack[sp];}

°Если sp указывает на первый занятый элемент в стеке, на его вершину, то:

sp=sp+1; stack[sp]=x;/*положить в стек*/ x=stack[sp]; sp=sp-1; //взять из стека

Примеры использования:

-инфиксная х+y*z-a/(b+c)

-префиксная -+*xyz/+abс

-постфиксная xyz*+abc+/- (ОбратнаяПольскаяЗапись)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]