Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
20.06.2014
Размер:
2.42 Кб
Скачать
#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