Программирование бинарных деревьев на языке СС++

Автор работы: Пользователь скрыл имя, 21 Ноября 2011 в 12:32, курсовая работа

Краткое описание

Язык Си, созданный Денисом Ритчи в начале 70-х годов в Bell Laboratory американской корпорации AT&T, является одним из универсальных языков программирования. Язык Си считается языком системного программирования, хотя он удобен и для написания прикладных программ.

Содержание

ВВЕДЕНИЕ 3
1 ПОСТАНОВКА ЗАДАЧИ 4
1.1 Общая характеристика задачи 4
1.2 Двоичные деревья 5
Конструкторы и деструкторы 7
Поиск 7
Удаление элементов 9
2 РАЗРАБОТКА АЛГОРИТМА ЗАДАЧИ 13
2.1 Описание данных, используемых для решения задачи 13
2.2 Описание схемы программы 13
3 КОДИРОВАНИЕ ПРОГРАММЫ 14
3.1 Описание структуры разрабатываемого пакета 14
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ 15
4.1 Внешний вид программы 15
ЗАКЛЮЧЕНИЕ 18
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ: 19
ПРИЛОЖЕНИЕ А 20

Вложенные файлы: 1 файл

программирование бинарных деревьев на языке СС++.doc

— 375.50 Кб (Скачать файл)
p>    else if ((number)>(beg->number)) {    //бОльшие номера идут  в правое поддерево

        beg->right=add(beg->right,number, time, station);

        return beg;

    }

    else {        //меньшие номера идут в левое  поддерево

        beg->left=add(beg->left,number, time, station);

        return beg;}

}

void show_all(traine *temp){    //функция вывода всего дерева - рекурсивный обход слева направо

    unsigned long d,h,m,s,t;

    if (temp){

        show_all(temp->left);

        t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;//разложение времени на дни, часы, минуты и секунды

        cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << endl << "Station:" << temp->station << endl;

        show_all(temp->right);}

}

void show_number(traine *temp, unsigned short number){ //поиск элемента с нужным номером, с учётом отсортированности дерева

    unsigned long d,h,m,s,t;

    if (temp){

        if (temp->number<number) {show_number(temp->right,number);}

        else if (temp->number>number) {show_number(temp->left,number);}

        else{

        t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;

        cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << endl << "Station:" << temp->station << endl;

        return;}

    }

        cout << "There is no such records\n";}

void show_station(traine *temp, char st[50],bool &f){ //переменная f нужна для  определения, был ли найден  хотя бы 1 поезд, т.к. обход производится "втупую", т.к. дерево сортировано  не по имени станции

    if (temp){

        if (st == (temp->station)) //если найден подходящий поезд

        {

            f=1;

            unsigned long d,h,m,s,t,f;

            t=temp->time;s=t%60;t=(t-s)/60;m=t%60;t=(t-m)/60;h=t%24;d=(t-h)/24;

            cout << "Train number:" << temp->number << endl << "Start time(d/h/m/s):" << d << ":" << h << ":" << m << ":" << s << f<<endl << "Station:" << temp->station << endl << endl;

        }

        show_station(temp->right,st,f); //просмотр правого поддерева

        show_station(temp->left,st,f);    //просмотр левого поддерева

    }

}

int main() {    //главная функция

    char k;        //временная переменная для чтения 1 символа для выбора пунктов  меню

    bool f;        //переменная для использования  с функцией поиска по имени  станции

    char strtmp[80];    //временная переменная для чтения с клавиатуры

    traine *list=0;    //дерево, изначально являющееся  пустым

    unsigned short d,h,m,s;    //переменные для разложения  времени на дни, часы, минуты  и секунды

    unsigned short number;    //временный номер

    char station[30];    //временная станция

    do{//главный  цикл меню

    cout << "Enter your choice:\n[1] Add new record\n[2] View all records\n[3] View a specific train number\n[4] View all trains aimed to a specified station\n[0] Exit program\n";

    do{

    cin >> k;//ввод выбора (а далее всё  понятно и так)

    if (k=='1'){

        do{

            cout << "Train number:\n";

            cin >> strtmp;

            number=atoi(strtmp);

        }while (!(number>0));

        do{

            cout << "Number of days:\n";

            cin >> strtmp;

            d=atoi(strtmp);

            cout << "Number of hours:\n";

            cin >> strtmp;

            h=atoi(strtmp);

            cout << "Number of minutes:\n";

            cin >> strtmp;

            m=atoi(strtmp);

            cout << "Number of seconds:\n";

            cin >> strtmp;

            s=atoi(strtmp);

        }while(d==0 && h==0 && m==0 && s==0);

        cout << "Station name:\n";

        cin >> station;

        list=add(list,number,s+m*60+h*3600+d*86400,station);

           

    }

    else if (k=='2'){

        if (list){

            show_all(list);}

        else {cout << "There is no trains\n";}}

    else if (k=='3'){

        cout << "Enter a train number:";

        do{

            cin >> strtmp;

            number=atoi(strtmp);

        }while (!(number>0));

        show_number(list,number);}

    else if (k=='4'){

        cout << "Enter a station name:";

        cin >>station;

        f=0;

        show_station(list,station,f);

        if (!f) {cout << "There is no trains\n";}

    }

    }while (!((k=='4')||(k=='3')||(k=='2')||(k=='1')||(k=='0')));

    }while (!(k=='0'));

    return 1;}

Информация о работе Программирование бинарных деревьев на языке СС++