Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Андреев_Довгалюк_лабор_СДиА.doc
Скачиваний:
18
Добавлен:
26.03.2015
Размер:
527.87 Кб
Скачать

Алгоритмы для реализации атд «Стек» на языке Си

      1. Реализация при помощи массива

// включение элемента в стек

int push(int *stack, const int StkSiz, int& StkTop, int Data)

{

if (StkTop >= StkSiz)

return 0;

else

{

stack[StkTop] = Data;

++StkTop;

return 1;

}

}

// исключение элемента из стека

int pop(int* stack, const int StkSiz, int& StkTop, int& Data)

{

if (StkTop != 0)

{

Data = stack[StkTop];

--StkTop;

return 1;

}

else return 0;

}

// инициализация стека

int StkInit(int* stack, const int StkSiz, int& StkTop)

{

for (int i = 0; i < StkSiz; ++i)

{

stack[i] = 0;

}

StkTop = 0;

return 1;

}

      1. Реализация при помощи связанных структур

struct Stack // Структура

{

Int tData;

Stack* pNext;

}

*Point;

// включение элемента в стек

int push(int &StkSiz, int MaxSiz, int Data, Stack **point)

{

if (StkSiz >= MaxSiz) return 0;

else

{

Stack *point1 = new Stack();

point1->tData = Data;

point1->pNext = *point;

*point = point1;

StkSiz++;

return 1;

}

}

// исключение элемента из стека

int pop(int &StkSiz, int MaxSiz, int& Data, Stack **point)

{

if (StkSiz == 0) return 0;

else

{

Stack *point1 = *point;

Data = point1->tData;

*point = (**point).pNext;

delete point1;

StkSiz--;

return 1;

}

}

// инициализация стека

int StkInit(int& StkSiz, Stack **point)

{

*point = NULL;

StkSiz = 0;

return 1;

}

// пример выполнения приложения

int main()

{

int MaxSize = 5;

int StkSize, i;

printf("Dynamic Stack testing\n\n");

StkInit(StkSize, &point);

for (i = 1; i < 10; i++)

{

if (push(StkSize, MaxSize, i, &point))

printf("Added: %i, result - true\n", i,);

else

printf("Added: %i, result - false\n", i,);

}

Int dat = -1;

for (i = 1; i < 10; i++)

{

If (pop(StkSiz, MaxSiz, Dat, &point))

printf("Removed: %i, result - true\n", dat);

else

printf("Removed: %i, result - false\n", dat);

}

return 0;

}

    1. Содержание отчета

1. Текст задания.

2. Описание основных алгоритмов, реализованных в программе.

3. Тексты программ.

4. План тестирования и отладки.

5.Оценка эффективности алгоритмов.

6. Результаты тестирования.

7. Выводы по работе.

    1. Контрольные вопросы для допуска к лабораторной работе

  1. Дайте характеристику АТД «Стек».

  2. Нарисуйте модель, использованную при реализации АТД «Стек» с помощью массива.

  3. Нарисуйте модель, использованную при реализации АТД «Стек» посредством динамических переменных.

  4. Напишите функцию для инициализации АТД «Стек».

  5. Напишите список параметров-переменных функции Push.

  6. Напишите список параметров-переменных функции Pop.

  7. Сравните затраты оперативной памяти при различных способах реализации АТД «Стек».

  1. Лабораторная работа № 5. Работа с очередью

Целью работы является изучение основных операций при работе с очередью и приобретение навыков программной реализации очереди с использованием языка программирования C++ и его стандартной библиотеки.

    1. Задание на работу

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

Получить индивидуальное задание.

Написать два варианта программы на языке программирования Си. В программе инициализируется очередь и затем выполняется заданная последовательность операций с очередью с данными заданной структуры. Первый вариант использует для организации очереди массив, второй использует для организации очереди реализацию из стандартной библиотеки C++ - std::queue<>.

Входные данные должны поступать из файла с именем «input.txt», результат записываться в файл с именем «output.txt».

Программа должна состоять из следующих частей:

  1. Заголовочный файл с объявлениями функций работы с очередью (lab_queue.h).

  2. Два файла с реализациями функций работы с очередью (lab_queue.cpp)

  3. Файл с алгоритмом решения предложенной задачи (main.cpp)

Файл с алгоритмом решения должен работать с очередью только через функции, описанные в заголовочном файле. Программа должна быть спроектирована таким образом, чтобы способ реализации очереди можно было бы изменить, заменив только файл lab_queue.cpp.

Определение структуры Queue должно находиться в файле lab_queue.cpp. Структура включает в себя данные, необходимые для реализации очереди выбранным способом (массив в одном случае или объект std::queue в другом). Программа пользователя библиотеки (main.cpp) не имеет доступа к определению структуры и пользуется функциями, объявленными в lab_queue.h.

Имена функций и параметров в lab_queue.hмогут отличаться от предложенных ниже, но принцип организации интерфейса должен оставаться тем же.

В начале своей работы программа должна создать очередь с помощью функции queue_create, а в конце – удалить с помощью queue_clear. Для работы с очередью (добавление элементов, удаление элементов и т.п.) используются соответствующие функции, объявленные в lab_queue.h.