From d8e322f93ce93f4ccdf466ecfd81bc4c7705c998 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Tue, 23 May 2023 16:20:15 +0300 Subject: [PATCH] add calkBT --- Homework/Hanoi Towers/app | Bin 16840 -> 16800 bytes Homework/Hanoi Towers/func.c | 214 ++++++++++++------------ Homework/Hanoi Towers/main.c | 33 ++-- Homework/Hanoi Towers/prot.h | 38 +++-- Homework/Trees/app | Bin 20328 -> 16488 bytes Homework/bintreeCalk/func.c | 312 +++++++++++++++++++++++++++++++++++ Homework/bintreeCalk/head.h | 10 ++ Homework/bintreeCalk/main.c | 27 +++ 8 files changed, 495 insertions(+), 139 deletions(-) create mode 100644 Homework/bintreeCalk/func.c create mode 100644 Homework/bintreeCalk/head.h create mode 100644 Homework/bintreeCalk/main.c diff --git a/Homework/Hanoi Towers/app b/Homework/Hanoi Towers/app index fead186a60adb7e9310b605bb6ea82dd96b74710..a38a949b8fa398ae571e9fa65665279ab610fb01 100755 GIT binary patch literal 16800 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 F{{ROhMfCsx diff --git a/Homework/Hanoi Towers/func.c b/Homework/Hanoi Towers/func.c index caa4f0e..7d417bc 100644 --- a/Homework/Hanoi Towers/func.c +++ b/Homework/Hanoi Towers/func.c @@ -5,7 +5,9 @@ #include #include -void pr(tower *tmp) +#define max(x, y) (((x) > (y)) ? (x) : (y)) + +void pr(node *tmp) { if (tmp == NULL) { @@ -14,63 +16,52 @@ void pr(tower *tmp) } while (tmp) { - printf("[%14p]<-[%14p]->[%14p] ", tmp->prev, tmp, tmp->next); - printf("data: [%4ld] s[%s]\n", tmp->data, tmp->s); + printf("[%14p]->[%14p] ", tmp, tmp->next); + printf("size: [%4d]\n", tmp->size); tmp = tmp->next; } printf("-------------\n"); } -tower *add_head(tower *crown, int hh) +node *add_head(node *head, int hh) { - tower *tmp = NULL; - int i; - if ((tmp = malloc(sizeof(tower))) == NULL) + node *tmp = NULL; + if ((tmp = malloc(sizeof(node))) == NULL) { perror("malloc: NULL"); exit(2); } - tmp->prev = NULL; - tmp->data = hh; - for (i = 0; i < N - 1; i++) - tmp->s[i] = ((char)(65 + rand() % 25)); - tmp->s[N - 1] = '\0'; - if (crown == NULL) + tmp->size = hh; + if (head == NULL) tmp->next = NULL; else { - tmp->next = crown; - crown->prev = tmp; + tmp->next = head; } return tmp; } -tower *del_head(tower *crown) +node *del_head(node *head) { - tower *tmp = crown; - if (crown == NULL) + node *tmp = head; + if (head == NULL) return NULL; - if (crown->next == NULL) + if (head->next == NULL) { - free(crown); + free(head); return NULL; } - crown = crown->next; - crown->prev = NULL; + head = head->next; free(tmp); - return crown; + return head; } -int length(tower *list) +int length(node *list) { - tower *tmp = list; + node *tmp = list; int res = 0; - if (list == NULL) - return 0; - if (list->data == 0 && !strcmp(list->s, "\0")) + if (list == NULL || list->size == 0) return 0; else { - while (tmp->prev != NULL) - tmp = tmp->prev; while (tmp != NULL) { res++; @@ -80,41 +71,18 @@ int length(tower *list) return res; } -tower *adv_add_head(tower *crown, int hh, char string[]) +void swap(node *a, node *b) { - tower *tmp = NULL; - if ((tmp = malloc(sizeof(tower))) == NULL) - { - perror("malloc: NULL"); - exit(2); - } - tmp->prev = NULL; - tmp->data = hh; - memcpy(tmp->s, string, N); - if (crown == NULL) - tmp->next = NULL; - else - { - tmp->next = crown; - crown->prev = tmp; - } - return tmp; -} -void swap(tower *a, tower *b) -{ - tower *tmp = NULL; - if ((tmp = malloc(sizeof(tower))) == NULL) + node *tmp = NULL; + if ((tmp = malloc(sizeof(node))) == NULL) exit(1); - tmp->data = a->data; - a->data = b->data; - b->data = tmp->data; - memcpy(tmp->s, a->s, N); - memcpy(a->s, b->s, N); - memcpy(b->s, tmp->s, N); + tmp->size = a->size; + a->size = b->size; + b->size = tmp->size; free(tmp); } -tower *get(tower *list, int n) +node *get(node *list, int n) { if (n >= length(list)) exit(3); @@ -124,73 +92,101 @@ tower *get(tower *list, int n) return list; } -tower *sort(tower *crown) +node *sort(node *head) { - if (crown == NULL || crown->next == NULL) - return crown; - int i, j, n = length(crown); + if (head == NULL || head->next == NULL) + return head; + int i, j, n = length(head); for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { - if (get(crown, j)->data < get(crown, i)->data) - swap(get(crown, i), get(crown, j)); + if (get(head, j)->size < get(head, i)->size) + swap(get(head, i), get(head, j)); } } - return crown; + return head; } -tower *printextra(tower *crown, int len, int i) +pointer *add_head_address(pointer *head, node **address) { - if (len < i || len == 0) + pointer *tmp = NULL; + if ((tmp = malloc(sizeof(pointer))) == NULL) { - printf("*********************************|"); - return crown; + perror("malloc: NULL"); + exit(2); } + tmp->address = address; + if (head == NULL) + tmp->next = NULL; else { - printf("[%14p] data: [%4ld] s[%s]|", crown, crown->data, crown->s); - return crown->prev; + tmp->next = head; } -} -tower *end(tower *crown) -{ - tower *tmp = NULL; - tmp = crown; - if (crown == NULL) - return crown; - while (tmp->next != NULL) - tmp = tmp->next; return tmp; } -void printftof(tower *head1, tower *head2, tower *head3) +node *printextra(node *head, int len, int i) { - int a = length(head1), b = length(head2), c = length(head3), maximum, i; - maximum = max(a, b); - maximum = max(maximum, c); - head1 = end(head1); - head2 = end(head2); - head3 = end(head3); - for (i = maximum; i > 0; i--) + if (len < i || len == 0) + { + for (i = 0; i < T - 1; i++) + printf(" "); + printf("|"); + return head; + } + else + { + disk(head->size); + printf("|"); + return head->next; + } +} + +void prcount(char s, int n) +{ + int i; + for (i = 0; i < n; i++) + { + printf("%c", s); + } +} +void disk(int size) +{ + int i; + prcount(' ', T / 2 - size); + for (i = 0; i < size - 1; i++) + { + printf("* "); + } + printf("*"); + prcount(' ', T / 2 - size); +} +void printftof(pointer *adresses) +{ + node *head1 = *(adresses->address), *head2 = *(adresses->next->address), *head3 = *(adresses->next->next->address); + int a = length(head1), b = length(head2), c = length(head3), i; // maximum + // maximum = max(max(a, b), c); + for (i = T / 2; i > 0; i--) { head1 = printextra(head1, a, i); head2 = printextra(head2, b, i); head3 = printextra(head3, c, i); printf("\n"); } - printf("----------------------------------------------------------------------------------------------------------\n"); - printf("Tower 1 |Tower 2 |Tower 3 |\n"); - printf("----------------------------------------------------------------------------------------------------------\n\n"); -} -int max(int a, int b) -{ - if (a < b) - return b; - else - return a; + prcount('-', 3 * T); + printf("\n"); + printf("Tower 1"); + prcount(' ', T - 8); + printf("|Tower 2"); + prcount(' ', T - 8); + printf("|Tower 3"); + prcount(' ', T - 8); + printf("|\n"); + prcount('-', 3 * T); + printf("\n"); } -void hanoi_tower(int n, tower **head_from, tower **head_to, tower **head_aux, tower **const tower1, tower **const tower2, tower **const tower3) +void hanoi_tower(int n, node **head_from, node **head_to, node **head_aux, pointer *adresses) { if (n == 0) { @@ -200,17 +196,17 @@ void hanoi_tower(int n, tower **head_from, tower **head_to, tower **head_aux, to else if (n == 1) { if (length(*head_to) == 0) - printftof(*tower1, *tower2, *tower3); - *head_to = adv_add_head(*head_to, (*head_from)->data, (*head_from)->s); + printftof(adresses); + *head_to = add_head(*head_to, (*head_from)->size); *head_from = del_head(*head_from); if (length(*head_from) == 0) - printftof(*tower1, *tower2, *tower3); + printftof(adresses); return; } - hanoi_tower(n - 1, head_from, head_aux, head_to, tower1, tower2, tower3); - printftof(*tower1, *tower2, *tower3); - *head_to = adv_add_head(*head_to, (*head_from)->data, (*head_from)->s); + hanoi_tower(n - 1, head_from, head_aux, head_to, adresses); + printftof(adresses); + *head_to = add_head(*head_to, (*head_from)->size); *head_from = del_head(*head_from); - printftof(*tower1, *tower2, *tower3); - hanoi_tower(n - 1, head_aux, head_to, head_from, tower1, tower2, tower3); + printftof(adresses); + hanoi_tower(n - 1, head_aux, head_to, head_from, adresses); } \ No newline at end of file diff --git a/Homework/Hanoi Towers/main.c b/Homework/Hanoi Towers/main.c index 7a22596..5c056f6 100644 --- a/Homework/Hanoi Towers/main.c +++ b/Homework/Hanoi Towers/main.c @@ -1,28 +1,35 @@ #include "prot.h" #include -#include #include #include +#include int main(int argc, char *argv[]) { - tower *crown1 = NULL, *crown2 = NULL, *crown3 = NULL; + node *head = NULL, *head2 = NULL, *head3 = NULL; + pointer *addresses = NULL; int r; srand(time(NULL)); - printf("Generated linked list (method of crown1)\n"); - while ((r = (rand() % 100)) < 75) - crown1 = add_head(crown1, r); - pr(crown1); - - printf("Length of linked list is: %d\n", length(crown1)); - + printf("Generated linked list (method of head)\n"); + /*while ((r=(rand()%T)) < T/2){ + if (r==0) r+=1; + head = add_head(head, r); + }*/ + for (r = 1; r <= T / 2; r++) + { + head = add_head(head, r); + } + pr(head); + printf("Length of linked list is: %d\n", length(head)); printf("Sorted linked list\n"); - sort(crown1); - pr(crown1); - - hanoi_tower(length(crown1), &crown1, &crown3, &crown2, &crown1, &crown2, &crown3); + sort(head); + pr(head); + addresses = add_head_address(addresses, &head3); + addresses = add_head_address(addresses, &head2); + addresses = add_head_address(addresses, &head); + hanoi_tower(length(head), &head, &head3, &head2, addresses); return 0; } \ No newline at end of file diff --git a/Homework/Hanoi Towers/prot.h b/Homework/Hanoi Towers/prot.h index f63dd86..fd6351b 100644 --- a/Homework/Hanoi Towers/prot.h +++ b/Homework/Hanoi Towers/prot.h @@ -1,23 +1,27 @@ #define N 10 +#define T 20 typedef struct Node { - long int data; + int size; struct Node *next; - struct Node *prev; - char s[N]; -} tower; +} node; +typedef struct nodepointer +{ + struct nodepointer *next; + struct Node **address; +} pointer; -void pr(tower *tmp); -tower *add_head(tower *crown, int hh); -tower *del_head(tower *crown); -int length(tower *list); -tower *sort(tower *crown); -tower *get(tower *list, int n); -void swap(tower *a, tower *b); -tower *adv_add_head(tower *crown, int hh, char string[]); -void hanoi_tower(int n, tower **head_from, tower **head_to, tower **head_aux, tower **const tower1, tower **const tower2, tower **const tower3); -void printftof(tower *head1, tower *head2, tower *head3); -tower *end(tower *crown); -tower *printextra(tower *crown, int len, int i); -int max(int a, int b); \ No newline at end of file +void pr(node *tmp); +node *add_head(node *head, int hh); +node *del_head(node *head); +pointer *add_head_address(pointer *head, node **address); +int length(node *list); +node *sort(node *head); +node *get(node *list, int n); +void swap(node *a, node *b); +void hanoi_tower(int n, node **head_from, node **head_to, node **head_aux, pointer *adresses); +void printftof(pointer *adresses); +node *printextra(node *head, int len, int i); +void disk(int size); +void prcount(char s, int n); \ No newline at end of file diff --git a/Homework/Trees/app b/Homework/Trees/app index 1e04fb2fc8a6cc4793950be379966beac816e4c6..ac9d5808fc5913fb31bc2dd859624a7387b78d29 100755 GIT binary patch delta 923 zcmZ`%ZAepL6n@_~Q#Z9u-A6hBCGCF(T0r!kbds zfijhXNGOmvrzlloj;CxzBme^PG=+c*R>(?4Z3i zR(QA0v0&1JgEy0*YvZ}s^qkDd*U@7YpOlGiQtY&es^ zUJwXsXJOcw)?SGzKE7zh*Nw(cipx=WM}Ok1LQIN-{|Mf$3A|xJCw7gj@CXHdD&@`CS zxzzRH*w+Bq^gG#|036fX)In89*%5&2`eJH>clvA<9}Y%?#&CoUuEHt94$V@mq8w8O zI=2cB49%L>$k_41AlL_I@nt9IPP@yiAH-Zsc&hl z6}}YAF<>!8!tvtwQFLA?-Rq|`2l(>5M9vYa^&B6weA3}%c`l1}0o&(R^Le3QDuv6% G8GisxRuxL;gN(_VUU<4Ji@C9uM`H1NGlp3ro^$YAH}hQ?Lfxp zJd!i(IEMirG&!l0`rtxWx+NGnCtG)>c(Qmxv$(FcVM@B7ZV*GZt= zReZkheBbYTobP<++?(-l((xDRbMu4qJ4yNJAZ^4=I>=ly=aqI!9VeMoogCdv!>sb` zKd*mWJC?bBul>E{EhnxyT}Mh+MvqytZg$$H|JQq4|Ek|j|Df;nXW26kNB`*G${al^ zA)Ai=cKk!VxvHJMr0=U*>imaO%Jx6dFIKH&UwELuUp3$PZ9}R&&}UY6(u=xQy};o! zgva$CSMOG4-!GLmeShO^{a3*mdUep}dDbC3UB)cO$$foUFz+cTlVsocRKFZt@3}Bp zw&+v6GdN5Cy>CX36&)Vkcn_T3!z^EXC<5HOmIH?am8Jxi3S68y^^vHdc7Q!`8cP?2^k4>zod{x8Rr5&o@ld-UsgG zf0as0ff5s$7C?b?L7ZRzAN?ZG-va%i$@VN?j=xvmoxodT)P+7if}b4+ zKe2rsNT8KMe7=ym(Zaq7M8r7=ET7IQa5e|UO(<4w!EkQ5QMq0e!9&k%2L#;%!?{Xi z*+`Ozr716f`oufc0!AkAMH7FbTH=dIqC5oDvHWA$pPSfYRi@L=iL)hKonlabk@L#HWM8Wd zUtoO!fX%4e`k3`CGm+-9F)pgLY|Iyc-8?iN_sdnpB!N`~pzSeok<1Iq&`D9Qc@45$ zF~VO0um^Pu3~O;wfsmdVG^~kdO07L+tzB0EW|rFZ225&Y5Lsw{ImOE2S0Di8c2t`O zt_Se=&@-Yo+(>YzNRS%|J}tJ)UiL(u2M>6VcLBAFgZw=BK&E`)(J4GXfWj%pIV*b8 zAhF1UhAgqjgO&$YvB-mlyw@TR8uB&7A{{;|CmbaCcFu2~?9HOdEs+J0fZ&^Yt$`q~DE$~d@+u)0U zH_`Tx>7&8^L}+usNB#DWnnNK9$HL|zYJ;*FI6Egulqq=I6QRjyM>V=vrFU4r(*Uch z_zD$WuNF?#DLy8}JSfyINLwtb!Dp_@?W1!m0;;8MS{=so!ev7FW`y1f;m)W(Kk`;en> zfH}O)JFxqGUU`LkhPZQ>yM{U4(#%y*)(&ysFhbN3?pe%hK^fzs$IPLHg}B)YXz+9;j4ibcnx7iD~)sSE?$*D;LKgzJH%)H4M%#T zg{x!3+#Tkg*Ld|1ckKrI$+Dm!gN*L-8kh`oWr&A_564+B=I+JAy!MxTz6@831Ymp1 zd3XnkTs?=jbBDMJv6OA-Vh#d#@);8E*v*4?cpVsik$V%oeu#U|;nV@^hYY?wv~&!{Osq4T+n}XMUt|!L(HBXlvr(cArV7BPG9;2q zL~+qRaJ2YcTZacj#pUv_Kzey&f{V_lWdBs^F$Z7cF{f$q(73fPR0;tEy2X zOl!W*5OAzoEYs`J9V_bet`;j5a_3JB`A)7oSIp!~O#|m$ zd^MF$>ucpeJHEc}XvKVtY1Djc4~cM&`~)xXz1vtjq=z;3RVuv3ula$o-% dIeXJ8>1_RGdziJY(^ +#include +#include +#include +#include +#include +#include "head.h" + +Tree *tnew(void) +{ + Tree *tmp; + if ((tmp = malloc(sizeof(Tree))) == NULL) + { + perror("malloc:"); + exit(1); + } + tmp->key = 0; + tmp->left = NULL; + tmp->right = NULL; + return tmp; +} + +Tree *leaf(char c) +{ + Tree *tmp; + tmp = tnew(); + tmp->key = c; + return tmp; +} + +Tree *maketree(char expr[], int first, int last) +{ + Tree *root; + int k; + + if (first == last) + { + return leaf(expr[first]); + } + + k = lastop(expr, first, last); + root = tnew(); + root->key = expr[k]; + root->left = maketree(expr, first, k - 1); + root->right = maketree(expr, k + 1, last); + return root; +} + +unsigned char priority(char c) +{ + if ((c - '0' >= 0) && (c - '0' <= 9)) + { + return MPRT; + } + switch (c) + { + case '+': + case '-': + return 1; + case '*': + case '/': + return 2; + case '^': + return 3; + } + return c; +} + +int lastop(char expr[], int first, int last) +{ + unsigned char min, prt; + int i, k; + min = MPRT; + for (i = first; i <= last; i++) + { + prt = priority(expr[i]); + if (prt <= min) + { + min = prt; + k = i; + } + } + return k; +} + +int calculate(Tree *root) +{ + int num1, num2; + if (!(root->left)) + { + return root->key - 0x30; + } + num1 = calculate(root->left); + num2 = calculate(root->right); + switch (root->key) + { + case '+': + return num1 + num2; + case '-': + return num1 - num2; + case '*': + return num1 * num2; + case '/': + return num1 / num2; + case '^': + return pow(num1, num2); + } + return 0xffffffff; +} + +void showtree(Tree *root, int level) +{ + if ((root->key > 31) && (root->key < 127)) + { + printf("%c ", root->key); + } + else + { + printf("%X ", root->key); + } + + if (root->right) + { + printf("------> "); + level++; + showtree(root->right, level); + level--; + } + if (root->left) + { + int i = 0; + + printf("\n"); + for (i = 0; i < level; i++) + { + printf(" "); + } + printf("| \n"); + + for (i = 0; i < level; i++) + { + printf(" "); + } + showtree(root->left, level); + } +} + +Tree *create(unsigned char key) +{ + Tree *tmp; + if ((tmp = malloc(sizeof(Tree))) == NULL) + { + perror("malloc:"); + exit(1); + } + tmp->key = key; + tmp->parent = NULL; + tmp->left = NULL; + tmp->right = NULL; + return tmp; +} + +Tree *add(Tree *root, unsigned char key) +{ + Tree *rtmp = root, *rsave = NULL, *tmp; + if ((tmp = malloc(sizeof(Tree))) == NULL) + { + perror("malloc:"); + exit(1); + } + while (rtmp) + { + rsave = rtmp; + if (key < rtmp->key) + { + rtmp = rtmp->left; + } + else if (key > rtmp->key) + { + rtmp = rtmp->right; + } + else + { + printf("\n There is element %c \n", key); + return root; + } + } + tmp->parent = rsave; + tmp->left = NULL; + tmp->right = NULL; + tmp->key = key; + if (key < rsave->key) + { + rsave->left = tmp; + } + else + { + rsave->right = tmp; + } + return root; +} + +Tree *search(Tree *root, unsigned char key) +{ + if ((root == NULL) || (root->key == key)) + { + return root; + } + if (key < root->key) + { + return search(root->left, key); + } + else if (key > root->key) + { + return search(root->right, key); + } +} + +Tree *min(Tree *root) +{ + while (root->left != NULL) + { + root = root->left; + } + return root; +} +Tree *max(Tree *root) +{ + while (root->right != NULL) + { + root = root->right; + } + return root; +} + +Tree *nextdel(Tree *root) +{ + Tree *l = NULL; + if (root->right != NULL) + { + return min(root->right); + } + l = root->parent; + while ((l != NULL) && (root == l->right)) + { + root = l; + l = l->parent; + } + return l; +} + +void delete(Tree *del) +{ + Tree *tmp; + if (del == NULL) + { + printf("\n no such elem \n"); + return; + } + if ((del->left == NULL) && (del->right == NULL)) + { + if (del == del->parent->right) + { + del->parent->right = NULL; + } + else + { + del->parent->right = NULL; + } + free(del); + return; + } + + if ((del->left == NULL) && (del->right != NULL)) + { + if (del == del->parent->right) + { + del->parent->right = del->right; + del->parent->right->parent = del->parent; + } + else + { + del->parent->left = del->right; + del->parent->left->parent = del->parent; + } + free(del); + return; + } + + if ((del->left != NULL) && (del->right == NULL)) + { + if (del == del->parent->right) + { + del->parent->right = del->left; + del->parent->right->parent = del->parent; + } + else + { + del->parent->left = del->left; + del->parent->left->parent = del->parent; + } + free(del); + return; + } + + if ((del->left != NULL) && (del->right != NULL)) + { + tmp = min(del->right); + del->key = tmp->key; + delete (tmp); + } +} diff --git a/Homework/bintreeCalk/head.h b/Homework/bintreeCalk/head.h new file mode 100644 index 0000000..19448bb --- /dev/null +++ b/Homework/bintreeCalk/head.h @@ -0,0 +1,10 @@ +#define MPRT 255 +#define SIZE 80 + +typedef struct tree +{ + unsigned char key; + struct tree *parent; + struct tree *left; + struct tree *right; +} Tree; diff --git a/Homework/bintreeCalk/main.c b/Homework/bintreeCalk/main.c new file mode 100644 index 0000000..27774da --- /dev/null +++ b/Homework/bintreeCalk/main.c @@ -0,0 +1,27 @@ +#include +#include +#include +#include +#include +#include +#include "head.h" + +int main(int argc, char *argv[]) +{ + char s[SIZE]; + Tree *tree = NULL; + if (argc < 2) + { + printf("no expression\n"); + return 2; + } + strcpy(s, argv[1]); + printf("processing %s\n", s); + tree = maketree(s, 0, strlen(s) - 1); + + printf("\n tree: \n"); + showtree(tree, 0); + + printf("= %d \n", calculate(tree)); + return 0; +} \ No newline at end of file