Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "student_leaf.h"
- #include <stdio.h>
- #include <string.h>
- #include "read_print.h"
- #define MAX_N 5
- #define LEN 1234
- void delet(student_leaf* a)
- {
- if(a -> get_down()) delet(a -> get_down());
- if(a -> get_next()) delet(a -> get_next());
- delete a;
- }
- void printl(student_leaf* a, int n)
- {
- int i;
- if(a != 0)
- {
- if ((n == MAX_N) || ((a -> get_next() == 0) && (a -> get_down() == 0))) {for(i = 0; i < n; i++){printf(" ");}printf("%s %d\n", (a -> get_name()), (a -> get_value()));}
- else
- {
- if((a -> get_down()) != 0) printl((a -> get_down()), n + 1);
- for(i = 0; i < n; i++)
- {
- printf(" ");
- }
- printf("%s %d\n", (a -> get_name()), (a -> get_value()));
- if((a -> get_next()) != 0) printl((a -> get_next()), n + 1);
- }
- }
- }
- int better(student_leaf* a, student_leaf* b)
- {
- if(strcmp(a -> get_name(), b -> get_name()) < 0) return -1;
- else if(strcmp(a -> get_name(), b -> get_name()) == 0) return 0;
- else return 1;
- }
- student_leaf* add(student_leaf* a, student_leaf *b)
- {
- b -> set_num(better(a, b));
- printf("%d KEK\n", b -> get_num());
- if(b -> get_num() == 1)
- {
- if(a -> get_down() == 0) a -> set_down(b);
- else if(a -> get_down() -> get_num() != 1) {b -> set_next(a -> get_down()); a -> set_down(b);}
- else a -> set_down(add(a -> get_down(), b));
- }
- else if(b -> get_num() == 0)
- {
- if(a -> get_down() == 0) a -> set_down(b);
- else if(a -> get_down() -> get_num() == 0) a -> set_down(add(a -> get_down(), b));
- else if(a -> get_down() -> get_num() < 0) {b -> set_next(a -> get_down()); a -> set_down(b);}
- else
- {
- if(a -> get_down() -> get_next() == 0) a -> get_down() -> set_next(b);
- else if(a -> get_down() -> get_next() -> get_num() == 0) a -> get_down() -> set_next(add(a -> get_down() -> get_next(), b));
- else {b -> set_next(a -> get_down() -> get_next()); a -> get_down() -> set_next(b);}
- }
- }
- else
- if(a -> get_down() == 0) a -> set_down(b);
- else if(a -> get_down() -> get_num() < 0) a -> set_down(add(a -> get_down(), b));
- else if(a -> get_down() -> get_num() == 0)
- {
- if(a -> get_down() -> get_next() == 0) a -> get_down() -> set_next(b);
- else a -> get_down() -> set_next(add(a -> get_down() -> get_next(), b));
- }
- else
- {
- if(a -> get_down() -> get_next() == 0) a -> get_down() -> set_next(b);
- else if(a -> get_down() -> get_next() -> get_next() == 0) a -> get_down() -> get_next() -> set_next(b);
- else a -> get_down() -> get_next() -> set_next(add(a -> get_down() -> get_next() -> get_next(), b));
- }
- //printf("%s\n", a -> get_down-> get_name());
- return a;
- }
- student_leaf* read(const char* fin, int i)
- {
- FILE* fp;
- int val;
- i = 0;
- char name[LEN];
- student_leaf* a = new student_leaf;
- student_leaf* b = new student_leaf;
- if(!(fp = fopen(fin, "r"))) return 0;
- fscanf(fp, "%s %d", name, &val);
- b -> init(name, val, 0);
- a = b;
- i++;
- while (fscanf(fp, "%s %d", name, &val) == 2)
- {
- b = new student_leaf;
- b -> init(name, val, 0);
- a = add(a, b);
- i++;
- }
- if (!feof(fp))
- {
- fclose(fp);
- return 0;
- }
- return a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement