Поиск по бинарному дереву
Разработка клиентской программы, демонстрирующей возможности таблицы символов, реализованной на базе бинарного поиска. Программная проверка подлинности информационного массива. Временная эффективность поиска, алгоритмов создания таблицы символов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 10.03.2019 |
Размер файла | 235,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http: //www. allbest. ru/
Министерство Образования и науки Украины
Национальная Металлургическая Академия Украины
Кафедра информационных технологий и систем
Индивидуальное Задание Вариант 1
по дисциплине ”Теория алгоритмов”
Проверил к.т.н. доц. Журба А.А.
Выполнил
Студент гр.КН01-17 Старина М.С.
Днепр 2018
поиск бинарный символ массив
#include "pch.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stddef.h>
#include <time.h>
#include <vector>
using namespace std;
bool menu; // Триггер для программы
unsigned int endtime, starttime, Searchtime; // время
enum eMenu { NOONE = 0, INPUT, DELETE, SHOW, SEARCH, RAND, SORT }; // состояния меню
static eMenu MenuChoose; // триггер меню
void MenuDraw(); // рисуем меню
void MenuInput(); // переводим меню в состояния(вкладки)
void MenuLogic(int n, int* arr); // для каждого состояния прописываем логику
void Setup(); // сетупер
void Quicksort(int* arr, int b0, int e0); // сортировка
void FillArray(int* const arr, const int size); // рандом
void ShowArray(const int* const arr, const int size); // вывод
void push_back(int*& arr, int& size, const int value); // доб элемент
void BinarTree(int* arr, int b0, int e0, int target); // поиск
void push_back1(int*& arr, int& size); // удаляем
int main(){
cout << "Enter mas size: " << endl;
int n;
cin >> n;
int* arr = new int[n];
for (int i = 0; i < n; i++)
{
arr[i] = 0;
}
Setup();
while (!menu) // пока menu = false -выполняем цикл. Рисуем, проверяем на нажатие клавиш - даем им логику
{
MenuDraw();
MenuInput();
MenuLogic(n, arr);
switch (MenuChoose)
{
case INPUT:
cout << "Enter element " << endl;
int m;
cin >> m; // вводим что добавить
push_back(arr, n, m);
MenuChoose = NOONE;
break;
case DELETE:
cout << "Enter index of element: " << endl;
int index;
cin >> index; // выбираем индекс , какой удалить
swap(arr[index], arr[n - 1]);
push_back1(arr, n);
MenuChoose = NOONE;
break;
}
}
delete[] arr;
return 0;
}
void Setup()
{
menu = false;
}
void MenuDraw()
{
system("cls");
cout << "---------------" << endl;
cout << "1.Enter Element" << endl;
cout << "2.Delete Element" << endl;
cout << "3.ANIME" << endl;
cout << "4.QuickSort" << endl;
cout << "5.Show ATD" << endl;
cout << "6.Search Element" << endl;
cout << "0.Exit" << endl;
cout << "---------------" << endl;
}
void MenuInput()
{
if (_kbhit()) // позволяет оставлять в буфере состояния меню , как будто мы постоянно жали бы на эту кнопку
{
switch (_getch())
{
case '1':
MenuChoose = INPUT;
break;
case '2':
MenuChoose = DELETE;
break;
case '3':
MenuChoose = RAND;
break;
case '4':
MenuChoose = SORT;
break;
case '5':
MenuChoose = SHOW;
break;
case '6':
MenuChoose = SEARCH;
break;
case '0':
menu = true; // закрываем программу
break;
}
}
}
void MenuLogic(int n, int* arr)
{
switch (MenuChoose) // проверяем в каком состоянии тригер
{
case SHOW:
ShowArray(arr, n);
break;
case SEARCH:
cout << "Enter target: " << endl;
int target;
cin >> target;
starttime = clock();
BinarTree(arr, 0, n - 1, target);
endtime = clock();
Searchtime = (endtime - starttime)/100;
cout << "Binary tree time: " << Searchtime << endl;
system("pause");
MenuChoose = NOONE;
break;
case RAND:
FillArray(arr, n);
break;
case SORT:
Quicksort(arr, 0, n - 1);
break;
case NOONE:
break;
}
}
void Quicksort(int* arr, int b0, int e0) // просто идем с двух сторон и свапаем, после рекурсивно вызываем
{
int d = arr[e0];
int b = b0;
int e = e0;
do
{
while (arr[b] < d)
++b;
while (arr[e] > d)
--e;
if (b <= e)
{
swap(arr[b], arr[e]);
++b;
--e;
}
} while (b <= e);
if (e > b0)
Quicksort(arr, b0, e);
if (b < e0)
Quicksort(arr, b, e0);
}
void FillArray(int* const arr, const int size)
{
srand(time(NULL));
for (int i = 0; i < size; i++)
{
arr[i] = 1 + rand() % 99;
}
}
void ShowArray(const int* const arr, const int size)
{
for (int i = 0; i < size; i++)
{
cout << arr[i] << " ";
}
cout << endl << endl;
}
// Работает только в той функции, где создан массив. Имхо с копиями не работаем.
void push_back(int*& arr, int& size, const int value)
{
int* newArray = new int[size + 1]; // создаем массив с 1 доп слотом и заполняем его елементами нашего массива,
for (int i = 0; i < size; i++)
{
newArray[i] = arr[i];
}
newArray[size] = value; // в последний слот закидываем значение
size++; // увеличивем сайз, для того что б в след раз у нас доб в новый слот
delete[] arr; // чистим наш массив прошлый
arr = newArray; // задаем указателю новый массив
}
void push_back1(int*& arr, int& size) // тоже самое , но создаем массив на 1 слот меньше и удаляем последний лишний, а индекс выбираем и свапаем с последним
{
int* newArray = new int[size - 1];
for (int i = 0; i < size - 1; i++)
{
newArray[i] = arr[i];
}
size--;
delete[] arr;
arr = newArray;
}
void BinarTree(int *arr, int b0, int e0, int target) // поиск просто на ифах, циклично , пока начало меньше или равно концу
{
int k = 0;
while (b0 <= e0)
{
int mid = (b0 + e0) / 2;
if (target == arr[mid])
{
cout << "Target: " << target << " Index: " << mid << endl;
k = 1; // нужно для того , что бы вывести NO one если не нашло
break;
}
else if (target > arr[mid])
{
b0 = mid + 1; // меняем мидл ,прежде проверяем справа или слева наша цель
}
else
{
e0 = mid - 1; // меняем центр , проверяя справа или слева наша цель
}
}
if (k == 0)
cout << "No one" << endl;
k = 0;
system("pause");
}
Размещено на Allbest.ru
Подобные документы
Разработка программы на языке С#, которая будет заниматься построением бинарного дерева для исходных данных и их редактированием, поиском информации о товарах по заданному ключу. Графические схемы алгоритмов поиска и удаления элемента бинарного дерева.
курсовая работа [796,9 K], добавлен 22.02.2016Программа поиска в базе данных в среде Borland Delphi 7.0 Enterprise. Условия и блок-схемы задач. Ввод массива. Текст программ в Delphi, в Паскаль. Текст программы поиска в базе данных. Кодирование материала. Изготовление реляционной базы данных.
практическая работа [27,6 K], добавлен 11.10.2008Основные критерии и требования к средствам поиска по ресурсу. Технологии создания инструментов поиска. Способы поиска по ресурсу. Принцип действия поиска по ключевым словам и при помощи поисковых систем. Разработка ресурса "Поиск по ресурсу" в виде блога.
курсовая работа [983,7 K], добавлен 01.02.2015Реализация комплекса программ поиска подстроки в тексте алгоритмом прямого поиска и алгоритмом Кнута-Морриса-Пратта. Сравнительный анализ теоретических и экспериментальных оценок эффективности алгоритмов. Разработка структуры программы, ее листинг.
курсовая работа [2,8 M], добавлен 22.01.2015Понятие таблицы, анализ способов ее формирования и организации, особенности создания доступа по имени. Сущность хеширования данных. Преимущества и недостатки связывания. Применение бинарного (двоичного) поиска и характеристика интерфейса программы.
курсовая работа [307,6 K], добавлен 16.06.2012Составление и программная реализация в среде Borland Delphi 7.0 алгоритмов итерационного и рекурсивного вариантов решения задачи поиска с возвращением. Исследование асимптотической временной сложности решения в зависимости от количества ячеек на плате.
курсовая работа [57,5 K], добавлен 25.06.2013Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Выбор режимов адресации, посредством которых будет осуществлен доступ к данным. Этапы создания программы. Характеристика таблицы символов и полученного файла листинга. Анализ изменения состояния регистра IP при выполнении команд JMP, Jcc, LOOPx.
курсовая работа [4,9 M], добавлен 25.03.2012Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.
реферат [929,8 K], добавлен 23.09.2013Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.
курсовая работа [1,7 M], добавлен 19.05.2014