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

8 Очередь. Логическое описание и физическое представление (файл).

Логическое описание: {пустой очереди соответствует пустой файл (внешний или внутренний)}

fopen + fread + fwrite + удаление из очереди можно сделать 2я способами – переписать файл или пропускать n первых элементов (сделать цикл, который n раз прогонит чтение “в пустую”)

Физическое представление: Сейвим данные в файл; [до]запись по умолчанию идет в конец, удалять элементы с начала – либо копируем файл без первого элемента во временный файл, а потом назад, либо просто пропускаем первые n элементов

9 Очередь. Логическое описание и физическое представление (массив).

Существует несколько способов реализации очереди е языках программирования МАССИВ. Первый способ представляет очередь в виде массива и двух целочисленных переменных start и end.

Обычно start указывает на голову очереди, end — на элемент, который заполнится, когда в очередь войдет новый элемент При добавлении элемента в очередь в q [end] записывается новый элемент очереди, а end уменьшается на единицу. Если значение end становится меньше 1. то мы как бы циклически обходим массив и значение переменной становится равным n. Извлечение элемента из очереди производится аналогично: после извлечения элемента q[start] из очереди переменная start уменьшается на 1. С такими алгоритмами одна ячейка из n всегда будет незанятой (так как очередь с n элементами невозможно отличить от пустой), что компенсируется простотой алгоритмов. Преимущества данного метода возможна незначительная экономия памяти по сравнению со вторым способом, проще и разработке. Недостатки: максимальное количество элементов в очереди ограничено размером массива. При его переполнении требуется перевыделение памяти и копирование всех элементов в новый массив.

10 Очередь. Логическое описание и физическое представление (динамические объекты).

Держим 2 структуры: сама очередь – указатель на первый и следующий после последнего (терминатор – упрощает добавление нового элемента в очередь) элементы (можно также хранить размер очереди)

  1. элемент очереди – собственное значение элемента и указатель на следующий.

struct Item {

T data;

struct Item* next;

typedef struct {

struct Item* first;

struct Item* last;

int size ;

} queue;

void Create (queue* q){

q—>first = q—>last = malloc(sizeof( struct Item));

q—>size = 0;

bool Empty(const queue* q){

return q—>first == q—>last;

int Size (const queue* q){

return q—>size;

bool Push(queue* q, const T t){

if (!(q—>last—>next = malloc( sizeof(struct Item))))

return false;

q—>last —>data = t;

q—>last = q—> last—> next;

q—>size++;

return true;

bool Pop(queue* q){

if(q—>first == q—>last)

return false;

struct Item* pi = q—>first;

q—>first = q—>first—>next;

q—>size;

free (pi);

return true;

T Top(const queue* q){

if(q—>first != q—>last)

return q— >first—>data;

void Destroy (queue* q){

while (! Empty (q)){

struct Item* pi = q—>first;

q—>first = q—>first—>next;

free (pi);}

free(q—>first);

q—>first = q—>last = 0:

q—>size = 0;

void Reverse(queue* q){

if(!Empty(q){

T t = Top(q);

Pop(q);

Reverse (q);

Push(q, t);}}

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