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

Queue_List.H

 

#ifndef _QUEUE_LIST_H_

#define _QUEUE_LIST_H_

 

#include "List_One.h"

 

/*Описание исключительных ситуаций*/

constintqueueListOk = listOneOK;

const int queueListEmpty = listOneEmpty;

const int queueListNoMem = listOneNoMem;

\

 

/*Переменная ошибок*/

externintlistOneError;

 

/*Базовый тип очереди на списке*/

typedef listOneBaseType QueueListBaseType;

 

/*Тип очереди на списке*/

typedefListOne QueueList;

 

/*Функции работы со очередью*/

void initQueueList(QueueList *S);                       // Инициализация очереди

void putQueueList(QueueList *S, QueueListBaseType E);   // Включение в очередь

void getQueueList(QueueList *S, QueueListBaseType *E);  // Исключение из очереди

void doneQueueList(QueueList *L);                       // Удаление очереди

int isEmptyQueueList(QueueList *S);                     // Предикат: пуста ли очередь

 

#endif

Queue_List.H

#include "Queue_List.h"

 

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

void initQueueList(QueueList *S) {

    initListOne(S);

    listOneError=queueListOk;

}

 

/*Включение в очередь*/

void putQueueList(QueueList *S, QueueListBaseType E) {

    endPtrListOne(S);

    putListOne(S, E);

    listOneError=queueListNoMem;

}

 

/*Исключение из очереди*/

void getQueueList(QueueList *S, QueueListBaseType *E) {

    beginPtrListOne(S);

    getListOne(S, E);

    listOneError = listOneEmpty;

}

 

/*Удаление очереди*/

void doneQueueList(QueueList *L) {

    doneListOne(L);

    

}

 

/*Предикат: пуста ли очередь*/

int isEmptyQueueList(QueueList *S) {

    return isEmptyListOne(S);

}

Модуль очереди с приоритетом:

QueuePriority.H

 

#ifndef _QUEUE_PRIORITY_H_

#define _QUEUE_PRIORITY_H_

 

/*Размер очереди*/

#define SIZE_QUEUE_PRIORITY 5

 

/*Описание исключительных ситуаций*/

const int okQueuePriority = 0;          // Все нормально

const int fullQueuePriority = 1;        // Очередь переполнена

const int emptyQueuePriority = 2;       // Очередь пуста

 

/*Переменная ошибок*/

extern int errorQueuePriority;

 

/*Базовый тип очереди*/

typedef struct {

    int data;                           // Данные

    int priority;                       // Приоритет

} queuePriorityBaseType;

 

/*Дескриптор очереди*/

typedef struct {

    queuePriorityBaseType buf[SIZE_QUEUE_PRIORITY]; // Буфер очереди

    unsigned uk;                                    // Указатель на хвост

} QueuePriority;

 

/*Функции работы с очередью*/

void initQueuePriority(QueuePriority *F);                           // Инициализация очереди

void putQueuePriority(QueuePriority *F, queuePriorityBaseType E);   // Включение в очередь

void getQueuePriority(QueuePriority *F, queuePriorityBaseType *E);  // Исключение из очереди

int isFullQueuePriority(QueuePriority *F);                          // Предикат: полна ли очередь

int isEmptyQueuePriority(QueuePriority *F);                         // Предикат: пуста ли очередь

 

#endif

QueuePriority.С

#include <stdio.h>

#include "QueuePriority.h"

 

/*Переменная ошибок*/

int errorQueuePriority;

 

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

void initQueuePriority(QueuePriority *F) {

    F->uk = 0;

    errorQueuePriority = okQueuePriority;

}

 

/*Включение в очередь*/

void putQueuePriority(QueuePriority *F, queuePriorityBaseType E) {

 

    /*Если очередь переполнена*/

    if (isFullQueuePriority(F)) {

        return;

    }

    /*Иначе*/

    F->buf[F->uk] = E;

    F->uk++;

}

 

/*Исключение из очереди*/

void getQueuePriority(QueuePriority *F, queuePriorityBaseType *E) {

 

    /*Если очередь пуста*/

    if (isEmptyQueuePriority(F)) {

        return;

    }

    /*Иначе поиск элемента с максимальным приоритетом*/

    queuePriorityBaseType max = F->buf[0];           // Максимальным примем 1-й элемент

    int maxPos = 0;                                 // Позиция элемента в макс. приоритетом

 

    for (unsigned i = 1; i < F->uk; i++) {            // Для всех элементов начиная со второго выполнить

        if (F->buf[i].priority > max.priority) {      // поиск элемента с максимальным приоритетом

            max = F->buf[i];

            maxPos = i;

        }

    }

 

    /*Максимальный найден. Производим исключение*/

    *E = max;                                           // Запись данных в переменную

    F->buf[maxPos] = F->buf[--F->uk];                  // Установка на позицию исключаемого элемента последнего

                                                        // Уменьшение длины очереди

}

 

/*Предикат: полна ли очередь*/

int isFullQueuePriority(QueuePriority *F) {

    if (F->uk == SIZE_QUEUE_PRIORITY) {

        errorQueuePriority = fullQueuePriority;

        return 1;

    }

    return 0;

}

 

/*Предикат: пуста ли очередь*/

int isEmptyQueuePriority(QueuePriority *F) {

    if (F->uk == 0) {

        errorQueuePriority = emptyQueuePriority;

        return 1;

    }

    return 0;

}

Модуль ОЛС, расположенного в динамической памяти:

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