From c237cdd31a73f135394598cf4704b9c6f0474b0c Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Wed, 10 May 2023 15:20:42 +0300 Subject: [PATCH] meow --- Homework/Hanoi Towers/app | Bin 0 -> 16840 bytes Homework/Hanoi Towers/appHT | Bin 16616 -> 0 bytes Homework/Hanoi Towers/func.c | 314 ++++++++++++++++++++++------------- Homework/Hanoi Towers/gen.c | 38 ----- Homework/Hanoi Towers/head.h | 24 --- Homework/Hanoi Towers/main.c | 28 ++++ Homework/Hanoi Towers/prot.h | 23 +++ 7 files changed, 246 insertions(+), 181 deletions(-) create mode 100755 Homework/Hanoi Towers/app delete mode 100755 Homework/Hanoi Towers/appHT delete mode 100644 Homework/Hanoi Towers/gen.c delete mode 100644 Homework/Hanoi Towers/head.h create mode 100644 Homework/Hanoi Towers/main.c create mode 100644 Homework/Hanoi Towers/prot.h diff --git a/Homework/Hanoi Towers/app b/Homework/Hanoi Towers/app new file mode 100755 index 0000000000000000000000000000000000000000..7629794c80a391d8e2ab46f90df6aca52d2b1ea1 GIT binary patch literal 16840 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 literal 0 HcmV?d00001 diff --git a/Homework/Hanoi Towers/appHT b/Homework/Hanoi Towers/appHT deleted file mode 100755 index 1af3a85f7208d70d397150d779a0b02870806e54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16616 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 cd86W<^f>2oS(lFaN8~^|S diff --git a/Homework/Hanoi Towers/func.c b/Homework/Hanoi Towers/func.c index 7673b4f..562a44e 100644 --- a/Homework/Hanoi Towers/func.c +++ b/Homework/Hanoi Towers/func.c @@ -1,140 +1,216 @@ -#include "head.h" +#include "prot.h" +#include +#include +#include +#include -void linked_print(LinkList* l) { - while (l != NULL) { - printf("%d %s\n", l->x, l->name); - l = l->next; - } -} - -LinkList* add_tail(LinkList* l, LinkList node) { - if (l->x == 0 && !strcmp(l->name, "\0")) { - l->x = node.x; - memcpy(l->name, node.name, LEN); - l->next = NULL; - l->prev = NULL; - return l; - } - - LinkList* res = l; - while (l->next != NULL) l = l->next; - - LinkList* tmp = malloc(sizeof(LinkList)); - tmp->x = node.x; - memcpy(tmp->name, node.name, LEN); - tmp->prev = l; - l->next = tmp; - return res; -} - -LinkList* add_head(LinkList* l, LinkList node) { - if (l->x == 0 && !strcmp(l->name, "\0")) { - l->x = node.x; - memcpy(l->name, node.name, LEN); - l->next = NULL; - l->prev = NULL; - return l; - } - - LinkList* tmp = malloc(sizeof(LinkList)); +void pr(node *tmp) +{ if (tmp == NULL) - exit(1); - - tmp->next = l; - l->prev = tmp; + { + printf("[%p]\n", tmp); + return; + } + while (tmp) + { + printf("[%14p]<-[%14p]->[%14p] ", tmp->prev, tmp, tmp->next); + printf("data: [%4ld] s[%s]\n", tmp->data, tmp->s); + tmp = tmp->next; + } + printf("-------------\n"); +} +node *add_head(node *head, int hh) +{ + node *tmp = NULL; + int i; + if ((tmp = malloc(sizeof(node))) == NULL) + { + perror("malloc: NULL"); + exit(2); + } tmp->prev = NULL; - tmp->x = node.x; - memcpy(tmp->name, node.name, LEN); + tmp->data = hh; + for (i = 0; i < N - 1; i++) + tmp->s[i] = ((char)(65 + rand() % 25)); + tmp->s[N - 1] = '\0'; + if (head == NULL) + tmp->next = NULL; + else + { + tmp->next = head; + head->prev = tmp; + } return tmp; } - -LinkList* del_head(LinkList* l) { - if (l == NULL) return NULL; - if (l->next == NULL) { - free(l); +node *del_head(node *head) +{ + node *tmp = head; + if (head == NULL) + return NULL; + if (head->next == NULL) + { + free(head); return NULL; } - LinkList* tmp = l->next; - tmp->prev = NULL; - free(l); - return tmp; + head = head->next; + head->prev = NULL; + free(tmp); + return head; } -void del_tail(LinkList* l) { - if (l == NULL) return; - else if (l->next == NULL) { - free(l); - l = NULL; - return; - } - while (l->next != NULL) l = l->next; - LinkList* tmp = l->prev; - l->prev = NULL; - free(l); - tmp->next = NULL; -} - -int len(LinkList* l) { +int length(node *list) +{ + node *tmp = list; int res = 0; - if (l->x == 0 && !strcmp(l->name, "\0")) + if (list == NULL) return 0; - - while (l != NULL) { - res++; - l = l->next; + if (list->data == 0 && !strcmp(list->s, "\0")) + return 0; + else + { + while (tmp->prev != NULL) + tmp = tmp->prev; + while (tmp != NULL) + { + res++; + tmp = tmp->next; + } } return res; } -LinkList get(LinkList* l, int n) { - if (n > len(l)) exit(3); - int i; - for (i = 0; i < n; i++) { - l = l->next; +node *adv_add_head(node *head, int hh, char string[]) +{ + node *tmp = NULL; + if ((tmp = malloc(sizeof(node))) == NULL) + { + perror("malloc: NULL"); + exit(2); } - return *l; + tmp->prev = NULL; + tmp->data = hh; + memcpy(tmp->s, string, N); + if (head == NULL) + tmp->next = NULL; + else + { + tmp->next = head; + head->prev = tmp; + } + return tmp; +} +void swap(node *a, node *b) +{ + 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); + free(tmp); } -void tower_of_hanoi(int n, LinkList* start, LinkList* finish, LinkList* tmp) { - if (n == 1) { - finish = add_head(finish, get(start, 0)); - start = del_head(start); +node *get(node *list, int n) +{ + if (n >= length(list)) + exit(3); + int i; + for (i = 0; i < n; i++) + list = list->next; + return list; +} + +node *sort(node *head) +{ + 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(head, j)->data < get(head, i)->data) + swap(get(head, i), get(head, j)); + } + } + return head; +} +node *printextra(node *head, int len, int i) +{ + if (len < i || len == 0) + { + printf("*********************************|"); + return head; + } + else + { + printf("[%14p] data: [%4ld] s[%s]|", head, head->data, head->s); + return head->prev; + } +} +node *end(node *head) +{ + node *tmp = NULL; + tmp = head; + if (head == NULL) + return head; + while (tmp->next != NULL) + tmp = tmp->next; + return tmp; +} + +void printftof(node *head1, node *head2, node *head3) +{ + 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--) + { + 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; +} + +void hanoi_tower(int n, node **head_from, node **head_to, node **head_aux, node **const tower1, node **const tower2, node **const tower3) +{ + if (n == 0) + { + printf("No linked list"); + exit(6); + } + 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); + *head_from = del_head(*head_from); + if (length(*head_from) == 0) + printftof(*tower1, *tower2, *tower3); return; } - - tower_of_hanoi(n - 1, start, tmp, finish); - - finish = add_head(finish, get(start, 0)); - start = del_head(start); - - tower_of_hanoi(n - 1, tmp, finish, start); - - printf("\nPosition:\nStart:\n"); - linked_print(start); - printf("Finish:\n"); - linked_print(finish); - printf("Tmp:\n"); - linked_print(tmp); -} - -void linked_free(LinkList* l) { - while (l->next != NULL) l = l->next; - - while (l->prev != NULL) { - LinkList* tmp = l; - l = l->prev; - free(tmp); - } -} - - - - - - - - - - - + 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); + *head_from = del_head(*head_from); + printftof(*tower1, *tower2, *tower3); + hanoi_tower(n - 1, head_aux, head_to, head_from, tower1, tower2, tower3); +} \ No newline at end of file diff --git a/Homework/Hanoi Towers/gen.c b/Homework/Hanoi Towers/gen.c deleted file mode 100644 index 06657e0..0000000 --- a/Homework/Hanoi Towers/gen.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "head.h" - - -int main(int argc, char* argv[]) { - srand(time(0)); - LinkList* l1 = malloc(sizeof(LinkList)); - LinkList* l2 = malloc(sizeof(LinkList)); - LinkList* l3 = malloc(sizeof(LinkList)); - - if (l1 == NULL || l2 == NULL || l3 == NULL) - exit(1); - - int i, j; - char s[LEN]; - for (i = 0; i < N; i++) { - for (j = 0; j < LEN - 1; j++) - s[j] = 'a' + rand() % 25; - s[j + 1] = '\0'; - - LinkList l; - l.x = i; - memcpy(l.name, s, LEN); - l.next = NULL; - l.prev = NULL; - - l1 = add_tail(l1, l); - } - - tower_of_hanoi(N, l1, l3, l2); - - // printf("Done:\n"); - - linked_free(l1); - linked_free(l2); - linked_free(l3); - - return 0; -} \ No newline at end of file diff --git a/Homework/Hanoi Towers/head.h b/Homework/Hanoi Towers/head.h deleted file mode 100644 index 57a5c78..0000000 --- a/Homework/Hanoi Towers/head.h +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include -#include - -#define N 3 -#define LEN 8 - -typedef struct LinkList { - int x; - char name[LEN]; - struct LinkList* next; - struct LinkList* prev; -} LinkList; - -void linked_print(LinkList* l); -LinkList* add_tail(LinkList* l, LinkList node); -LinkList* add_head(LinkList* l, LinkList node); -LinkList* del_head(LinkList* l); -void del_tail(LinkList* l); -int len(LinkList* l); -LinkList get(LinkList* l, int n); -void tower_of_hanoi(int n, LinkList* start, LinkList* finish, LinkList* tmp); -void linked_free(LinkList* l); \ No newline at end of file diff --git a/Homework/Hanoi Towers/main.c b/Homework/Hanoi Towers/main.c new file mode 100644 index 0000000..3219150 --- /dev/null +++ b/Homework/Hanoi Towers/main.c @@ -0,0 +1,28 @@ +#include "prot.h" +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + + node *head = NULL, *head2 = NULL, *head3 = NULL; + int r; + + srand(time(NULL)); + + printf("Generated linked list (method of head)\n"); + while ((r = (rand() % 100)) < 75) + head = add_head(head, r); + pr(head); + + printf("Length of linked list is: %d\n", length(head)); + + printf("Sorted linked list\n"); + sort(head); + pr(head); + + hanoi_tower(length(head), &head, &head3, &head2, &head, &head2, &head3); + return 0; +} \ No newline at end of file diff --git a/Homework/Hanoi Towers/prot.h b/Homework/Hanoi Towers/prot.h new file mode 100644 index 0000000..d49d549 --- /dev/null +++ b/Homework/Hanoi Towers/prot.h @@ -0,0 +1,23 @@ +#define N 10 + +typedef struct Node +{ + long int data; + struct Node *next; + struct Node *prev; + char s[N]; +} node; + +void pr(node *tmp); +node *add_head(node *head, int hh); +node *del_head(node *head); +int length(node *list); +node *sort(node *head); +node *get(node *list, int n); +void swap(node *a, node *b); +node *adv_add_head(node *head, int hh, char string[]); +void hanoi_tower(int n, node **head_from, node **head_to, node **head_aux, node **const tower1, node **const tower2, node **const tower3); +void printftof(node *head1, node *head2, node *head3); +node *end(node *head); +node *printextra(node *head, int len, int i); +int max(int a, int b); \ No newline at end of file