Алгоритм обробки типів даних лінійної структури
Характеристика головних принципів обробки типів даних лінійної структури. Особливість проведення основних та додаткових операцій з пріоритетною чергою. Виконання дій за фіксований час. Аналіз застосування черговості пріоритетів в операційній системі.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | украинский |
Дата добавления | 23.11.2016 |
Размер файла | 114,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Національний авіаційний університет
Інститут інформаційно-діагностичних систем
Кафедра прикладної математики
Лабораторна робота
з дисципліни «Алгоритми та структури даних»
на тему: «Тип даних лінійної структури.Стек. Черга. Черга пріоритетів»
Виконала:
Пушкарь В.О.
Перевірила:
Чолишкіна О.Г.
Київ 2016
Постановка задачі
Тема: Тип даних лінійної структури.Стек. Черга. Черга пріоритетів.
Мета: Ознайомитися з основними алгоритмами обробки типів даних лінійної структури.
Завдання:
1. Вивчити основні принципи обробки типів даних лінійної структури.
2. Реалізувати програмно лінійну структуру даних відповідно до варіанту. Організувати обробку заданої структури відповідно до запиту користувача.
3. Оцінити обчислювальну складність алгоритмів обробки.
Реалізувати програмно чергу пріоритетів для візового агентства. Диспетчер вводить ім'я клієнта та країну, яку клієнт хоче відвідати. Для кожної країни задані пріоритети ( Країни, в які не потрібна віза мають пріоритет 0; країни ближнього зарубіжжя мають пріоритет 10 і т.д.). Вихід програми - № черги клієнта і день, коли йому можна прийти за візою (путівкою), якщо агентство в день обслуговує N клієнтів.
Теоретичні відомості
Черга - динамічна структура даних, що працює за принципом «перший прийшов - перший пішов» (англ. FIFO - first in, first out).
Черга пріоритетів - це модифікована версія черги, яка із списку видаляє елемент з найвищим пріоритетом. При видаленні елементів з однаковими пріоритетами спочатку видаляється елемент, що надійшов раніше.
Основні операції з чергою:
· англ. еnqueue - «поставити в чергу». Операція додавання елемента в «хвіст» черги. При цьому довжина черги збільшується на одиницю. Якщо відбувається намагання додати елемент у вже заповнену чергу, відбувається її переповнення.
· англ. dequeue - «отримання з черги». Операція, яка повертає елемент з голови та видаляє його з черги, таким чином встановлюючи голову на наступний за видаленим елемент та зменшуючи довжину на одиницю. При намаганні видалити елемент з пустої черги, виникає ситуація «незаповнення».
Додаткові операції з пріоритетною чергою:
- включення елемента в чергу по пріоритету;
- виключення елемента з черги по пріоритету;
- визначення розміру черги;
- очищення черги.
Практична частина
Завданням мого варіанту було реалізувати алгоритм знаходження № черги клієнта у візовому агентстві використовуючи тип даних - черга пріоритетів. Кожна з операцій з чергою пріоритетів виконується за фіксований час O(1). Цей алгоритм виконується завжди за один і той же час незалежно від розміру даних, отже має константну складність.
На рис. 1 наведено результат роботи алгоритму.
Рис.1
Текст програми
#include <iostream>
#pragma warning (disable : 4996)
#include <algorithm>
#include <string.h>
#include <time.h>
using namespace std;
struct Element
{
char * data; // данные
int pr; // приоритет
};
class QueuePriority
{
enum { EMPTY = -1, FULL = 999 };
// Массив элементов
Element q[FULL + 1];
// Максимальный размер очереди
int MaxQueueLength;
// Текущий размер очереди
int QueueLength;
public:
// Конструктор
QueuePriority(int m);
// Добавление элемента
void Add(const Element & elem);
// Очистка очереди
void Clear();
// Проверка существования элементов в очереди
bool IsEmpty();
// Проверка на переполнение очереди
bool IsFull();
// Количество элементов в очереди
int GetCount();
//демонстрация очереди
void Show();
//сравнение двух слов
int Srav(char*nam);
//опредиление приоритета
int Preor(char *MasP);
};
void QueuePriority::Show(){
cout << "\n";//демонстрация очереди
for (int i = 0; i<QueueLength; i++){
cout << q[i].data <<" "<< q[i].pr << "\n\n";
} лінійний пріоритетний черга операційний
}
QueuePriority::QueuePriority(int m)
{//получаем размер
MaxQueueLength = m;
QueueLength = 0;
}
void QueuePriority::Clear()
{// Эффективная "очистка" очереди
QueueLength = 0;
}
bool QueuePriority::IsEmpty()
{// Пуст?
return QueueLength == 0;
}
bool QueuePriority::IsFull()
{// Полон?
return QueueLength == MaxQueueLength;
}
int QueuePriority::GetCount()
{// Количество присутствующих в очереди элементов
return QueueLength;
}
void QueuePriority::Add(const Element & elem)//добавление елемента в очередь.Очередь с приоритетным включением
{
int i, k = -1;
// поиск позиции
for (i = 0; i<QueueLength; i++)
if (q[i].pr > elem.pr){
k = i;
break;
}
if (k == -1){
q[QueueLength ] = elem;
}
else
{
for (int j = QueueLength; j>k; j--)
q[j ] = q[j-1];
q[k] = elem;
}
QueueLength++;
}
char* tolower(char*str){//все букви в нижнем регистре
if (str){
for (int i = 0; str[i] != 0; i++){
str[i] = tolower(str[i]);
}
}
return str;
}
int QueuePriority::Srav(char *nam){//сравнение двух слов
for (int i = 0; i < QueueLength; i++)
if (strcmp(nam, q[i].data) == 0){
return i + 1;
}
}
int QueuePriority::Preor(char *MasP){
tolower(MasP);
int Prior;
if ((strcmp(MasP, "belarus")) == 0 || (strcmp(MasP, "russia")) == 0){
return Prior = 0;}
else if ((strcmp(MasP, "turkey")) == 0 || (strcmp(MasP, "moldavia")) == 0 || (strcmp(MasP, "brazil")) == 0){ return Prior = 5; }
else if ((strcmp(MasP, "maldives")) == 0 || (strcmp(MasP, "egypt")) == 0 || (strcmp(MasP, "thailand")) == 0){return Prior = 10; }
else if ((strcmp(MasP, "australia")) == 0 || (strcmp(MasP, "india")) == 0 || (strcmp(MasP, "uae")) == 0){
return Prior = 15; }
else if ((strcmp(MasP, "germany")) == 0 || (strcmp(MasP, "greece")) == 0 || (strcmp(MasP, "france")) == 0 || (strcmp(MasP, "poland")) == 0 || (strcmp(MasP, "italy")) == 0){
return Prior = 20;
}
else return Prior = 30;
}
void main()
{
setlocale(LC_ALL, "Russian");
QueuePriority q(25);//создание очереди
cout << "Введите длину очереди" << endl;
int strok = 0; //Количество строк в массиве
int Nday = 0; int Prior = 0; //приоритет
cin >> strok;
cout << "Введите количество клиентов,обслуживаемых в день" << endl;
cin >> Nday;
int len = 255; //Длина строки
char**Massiv = new char*[strok]; //Выделяем память под количество строк.Массив имен
char**MasP = new char*[strok]; //Выделяем память под количество строк.Массив стран
Element s[200];//массив структур
for (int i = 0; i < strok; i++){ Massiv[i] = new char[len]; MasP[i] = new char[len];
} //Выделяем память под количество символов в строке для каждой строки в отдельности
cout << "Вводимое количество строк = " << strok << "\n";
for (int i = 0; i < strok; i++){
cin >> Massiv[i] >> MasP[i];//Считываем строки с клавиатуры в массив
Prior = q.Preor(MasP[i]);
s[i].data = Massiv[i];
s[i].pr = Prior;
q.Add(s[i]);//добавление елемента
}
cout << "Введите ваше имя" << endl;
char nam[290];
char nam2[290];
cin >> nam;
tolower(nam);
int Flagnal = 0; int inde = 0, Flag = 0, NoFlag = 0, nom = 0;
for (int i = 0; i < strok; i++)
{
if (strcmp(nam, Massiv[i]) == 0){ Flagnal = 1; inde = i; break;}
}
if (Flagnal!=0){//если вы есть в очереди
cout << endl;
cout << "Страна, которую вы хотите посетить:" << endl;
cout << MasP[inde] << endl;
}
if (NoFlag == 0){//опредиление дня и номера в очереди
cout << nam;
int k = q.Srav(nam);//номер в очереди
// cout << endl;
cout << ", Вы " << k << " в очереди." << endl;
int day = 0;//день
if ((k % Nday) == 0){ day = k / Nday;
}
else{ day = (k / Nday) + 1;
}
cout << "Прийдите в " << day << " день забрать путевку" << endl;
}
q.Show();//показ очереди
q.Clear();//очистка
}
Блок-схема
Висновки
На основі проведеної роботи, можна зробити наступні висновки:
· Тип даних черга пріоритетів має низку переваг та недоліків.
До переваг можна віднести:
- У багатьох мовах програмування є вбудовані засоби організації та обробки черг.
- Черга пріоритетів - зручний спосіб організації викликів функцій.
- Операції з чергою пріоритетів мають константну складність О(1).
До недоліків віднесемо:
- Не можна отримати доступ до елементів, що знаходяться у середині черги;
- Пошук по черзі відбувається повільно;
· Чергу пріоритетів застосовують в операційній системі, яка записує процеси у список, а потім виконує їх у порядку пріоритетів.
Список використаної літератури
1. Седжвик Р. - Фундаментальные алгоритмы на С++. Части 1-4. с. 159.
2. Вирт Н. - Алгоритмы+структуры данных=программы. с. 198.
3. Ахо Альфред В., Хопкрофт Джон, Ульман Джеффри Д. - Структуры даннях и алгоритмы. с. 60-63.
Размещено на Allbest.ru
Подобные документы
Аналіз розроблення та програмування обчислювального процесу лінійної структури, налагодження програм. Вивчення правил запису констант, числових і символьних змінних, типів даних. Побудова алгоритму розв’язування завдання та креслення його блок-схеми.
реферат [2,1 M], добавлен 22.04.2012Процеси пошуку інформацій та розробка структури даних для ефективного зберігання та обробки інформації. Як приклад розглянуто бінарне дерево. Бінарні структури широко використовуються у житті,широко використовуються в багатьох комп'ютерних завданнях.
курсовая работа [67,7 K], добавлен 24.06.2008Тип як множина допустимих значень і операцій над об’єктами, формат його внутрішнього представлення. Класифікація типів даних; масиви, записи, файли, стандартні модулі. Функції і оператори роботи з рядками, засоби їх обробки: процедури і функції.
реферат [32,3 K], добавлен 13.11.2010Структури даних як способи їх організації в комп'ютерах. Підтримка базових структури даних в програмуванні. Дерево як одна з найпоширеніших структур даних. Бінарні дерева на базі масиву. Створення списку - набору елементів, розташованих у певному порядку.
контрольная работа [614,7 K], добавлен 18.02.2011Огляд програмного комплексу SPSS у ПАТ "Платинум Банк". Аналіз обробки результатів анкетування та ідентифікації інтересів опитаних. Система Access як інструмент управління базами даних. Метод інтеграції даних усіх типів досліджень на замовлення клієнта.
реферат [2,5 M], добавлен 05.11.2012Представлення типів даних при роботі нейронними мережами. Корисні вхідні змінні, їх тестування методом спроб та помилок. Генетичний алгоритм відбору вхідних даних. Нелінійне пониження розмірності, пропущені значення. Створення нового набору даних.
реферат [1,1 M], добавлен 09.07.2011Розробка бази даних для автоматизації облікової інформації в системі управління базами даних Access з метою полегшення роботи з великими масивами даних, які існують на складах. Обґрунтування вибору системи управління. Алгоритм та лістинг програми.
курсовая работа [550,9 K], добавлен 04.12.2009Опис процесу створення технічного завдання на розробку бази даних для сільської бібліотеки. Виявлення масиву даних та їх структури. Внесення інформації в базу. Визначення типів і зв’язків між таблицями. Створення інтерфейсу системи керування базою даних.
контрольная работа [174,9 K], добавлен 07.01.2015Структура (класифікація) типів даних мови T. Pascal: прості, структуровані; стандартні модулі, їх призначення, символьні масиви. Визначення рядкового типу даних, основні операції. Стандартні засоби обробки рядків: присвоювання, порівняння, з’єднання.
реферат [32,3 K], добавлен 13.11.2010Проектування бази даних "Аптека" у Microsoft Access, розробка структури таблиць, ключових полів і схеми даних. Створення запитів різних типів, екранних форм різного виду для введення і перегляду даних. Створення кнопкових форм, що полегшують навігацію.
дипломная работа [3,1 M], добавлен 16.11.2014