Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы по информатике1.docx
Скачиваний:
1
Добавлен:
15.04.2019
Размер:
99.25 Кб
Скачать

43. Использование динамических переменных для представления и работы со стеком.

44. Очередь, реализация очереди массивом.

Очередь – абстрактная структура данных, работающая по принципу FIFO (First In – First Out, первый пришел – первый ушел). Доступ к очереди возможен с двух концов, поэтому для работы с очередью необходимы 2 переменные, определяющие вход и выход. Наиболее часто используются имена tail-хвост и head-голова или front-начало и rear-конец. Очередь, так же как и стек, можно реализовать с помощью динамических переменных и массива. Операции с очередью – инициализация очереди, добавить элемент в очередь и удалить из очереди. Например, очередь, рассчитанная на 100 элементов описывается так:

const int n=100;

float Queue [n], x;

int head, tail;

Элементы массива (очереди), так же как и у стека, могут быть любого типа, в том числе и комбинированного. Инициализация очереди в данном случае это присваивание локальных значений head и tail. Если очередь пустая, то можно положить указатели, равные 0 в С++ (1 в паскале)

45. Очередь, представление и реализация основных операций с помощью динамических переменных.

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

Дек - очередь с двумя концами.

Очередь можно описать и реализовать с помощью массива.

очередь из 100элементов:

const int n = 100;

float Queue[n],x;

int head,tail;

основные операции:

инициализация очереди

добавить элемент в очередь

удалить элемент из очереди

Инициализация очереди заключается в присваивании значений указателей head и tail

если очередь пустая, то head = 0 ; tail = 0; head указывает на 1 элемент в очереди, а tail может указывает или на последний элемент в очереди, или на первую свободную ячейку в массиве, доступную для записи информации.

В начале работы tail >= head. Чтобы не прерывать работу массива мы можем присвоить переменной tail значение 0 и продолжить заполнять очередь с начала массива. Таким образом получается закольцованная структура очереди.

Чтобы отличить пустую очередь от заполненной, смоделированной при помощи закольцованного массива, приходится оставлять одну ячейку свободной и условием того, что очередь пустая использовать выражение head=tail, а условие полной очереди tail = head +1;

добавление элемента в очередь

tail = ((tail+1)%n);

if (tail =head) cout ''очередь полна"<<endl;

else Queuep[tail]=x;

Взятие элемента из очереди

if (head == tail )

cout <<"Очередь пуста" << endl;

else (head=((head+1)%n);

x=Queue[head];

}

Движение по кольцу

Если значение tail <n-1 , то tail увеличивается на единицу.

(1%100)=1; (2%100)= 2 и т.д., но когда tail=n-1 то (99+1)%100=0

46. Реализация основных операций со списком: добавление, удаление, поиск.

Линейный список - множество, состоящее из n>=0 компонент, структурные свойства которых ограничиваются линейным положением компонент.

добавление нового элемента new за i-тым узлом

if (i==l || i>l) printf("\n нельзя добавить");

else

{ for (j=l; j>i+1; j--) d[j+1]=d[j];

d[i+1]=new; l++;

}

удаление элемента, следующего за i-тым узлом

if (i>=l) printf("\n нет следующего ");

l--;

for (j=i+1;j=l) printf("\n нет соседа");

else printf("\n %d %d",d[i-1],d[i+1]);