
Добавил:
Valeriya
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №2 Вариант 17 / main
.txt#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
int compareStrings(char* string1, char* string2) // Функция для сравнения двух строк, 1 если 1 строка > 2, 0 если равны, -1 в обратном случае
{
int minLength;
if (strlen(string1) >= strlen(string2)) minLength = strlen(string2);
else minLength = strlen(string1);
for (int i = 0; i < minLength; i++)
{
if (string1[i] > string2[i]) return 1;
if (string1[i] < string2[i]) return -1;
}
if (strlen(string1) == strlen(string2)) return 0;
if (strlen(string1) > strlen(string2)) return 1;
return -1;
}
typedef struct tree // обьявление типа "Элемент дерева"
{
char key[256];
float data;
struct tree *left;
struct tree *right;
} Tree;
Tree *add(Tree *root, char newKey[256], float newData) // добавление в дерево
{
if (root==NULL)
{
root = (Tree*)malloc(sizeof(Tree));
strcpy(root->key, newKey);
root->data = newData;
root->left = root->right = 0;
return root;
}
if (compareStrings(root->key, newKey) == 1)
root->left = add(root->left, newKey, newData);
else
root->right = add(root->right, newKey, newData);
return root;
}
void search(Tree *root, char stringStart[256], char stringEnd[256]) // поиск
{
if(root->left)
if (compareStrings(root->key, stringStart) == 1)
search(root->left, stringStart, stringEnd);
if (compareStrings(root->key, stringStart) >=0 && compareStrings(root->key, stringEnd) <= 0)
{
printf("%s %f\n\r",root->key, root->data);
}
if(root->right)
if (compareStrings(root->key, stringEnd) == -1)
search(root->right, stringStart, stringEnd);
}
void main()
{
setlocale(LC_ALL,"Russian");
int n;
char key[256], keyStart[256], keyEnd[256];
float data;
printf("Введите количество ключей: ");
scanf("%d",&n);
Tree *root = NULL;
for(int i = 0; i < n; i++)
{
printf("Введите ключ %i элемента: ",i+1);
scanf("%s", key);
printf("Введите данные %i элемента: ",i+1);
scanf("%f", &data);
root = add(root, key, data);
}
printf("Введите начальный ключ поиска: ");
scanf("%s", keyStart);
printf("Введите конечный ключ поиска: ");
scanf("%s", keyEnd);
if (compareStrings(keyStart, keyEnd) == 1)
{
printf("Ошибка в интервале");
return;
}
printf("Ключ Данные\n\r");
search(root, keyStart, keyEnd);
getch();
}
Соседние файлы в папке Лабораторная работа №2 Вариант 17