diff --git a/2025.05.23/dist/Kochubei_DS/a01.c b/2025.05.23/dist/Kochubei_DS/a01.c index cd7e041..4159fe2 100644 --- a/2025.05.23/dist/Kochubei_DS/a01.c +++ b/2025.05.23/dist/Kochubei_DS/a01.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a02.c b/2025.05.23/dist/Kochubei_DS/a02.c index 2bf9f1b..3ce2441 100644 --- a/2025.05.23/dist/Kochubei_DS/a02.c +++ b/2025.05.23/dist/Kochubei_DS/a02.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a03.c b/2025.05.23/dist/Kochubei_DS/a03.c index 18f017f..fd160fe 100644 --- a/2025.05.23/dist/Kochubei_DS/a03.c +++ b/2025.05.23/dist/Kochubei_DS/a03.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a04.c b/2025.05.23/dist/Kochubei_DS/a04.c index c74fcaa..e3e0649 100644 --- a/2025.05.23/dist/Kochubei_DS/a04.c +++ b/2025.05.23/dist/Kochubei_DS/a04.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a05.c b/2025.05.23/dist/Kochubei_DS/a05.c index adacb25..9cb942b 100644 --- a/2025.05.23/dist/Kochubei_DS/a05.c +++ b/2025.05.23/dist/Kochubei_DS/a05.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a06.c b/2025.05.23/dist/Kochubei_DS/a06.c index 1512eb8..7e4c702 100644 --- a/2025.05.23/dist/Kochubei_DS/a06.c +++ b/2025.05.23/dist/Kochubei_DS/a06.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a07.c b/2025.05.23/dist/Kochubei_DS/a07.c index 1f8928f..75ab68b 100644 --- a/2025.05.23/dist/Kochubei_DS/a07.c +++ b/2025.05.23/dist/Kochubei_DS/a07.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a08.c b/2025.05.23/dist/Kochubei_DS/a08.c index bada0a2..c853c3c 100644 --- a/2025.05.23/dist/Kochubei_DS/a08.c +++ b/2025.05.23/dist/Kochubei_DS/a08.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a09.c b/2025.05.23/dist/Kochubei_DS/a09.c index 1fe6672..64fb189 100644 --- a/2025.05.23/dist/Kochubei_DS/a09.c +++ b/2025.05.23/dist/Kochubei_DS/a09.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/a10.c b/2025.05.23/dist/Kochubei_DS/a10.c index d6aa531..2e6ec5c 100644 --- a/2025.05.23/dist/Kochubei_DS/a10.c +++ b/2025.05.23/dist/Kochubei_DS/a10.c @@ -26,19 +26,16 @@ int main(int argc, char** argv) if (status==-1) { printf("Cannot open file\n"); - delete_node(N); return -1; } else if (status==-2) { printf("Cannot read file\n"); - delete_node(N); return -2; } else if (status==3) { printf("Cannot allocate memory\n"); - delete_node(N); return -2; } print_node(p, N); diff --git a/2025.05.23/dist/Kochubei_DS/add.c b/2025.05.23/dist/Kochubei_DS/add.c index 7094a28..cd83038 100644 --- a/2025.05.23/dist/Kochubei_DS/add.c +++ b/2025.05.23/dist/Kochubei_DS/add.c @@ -157,11 +157,11 @@ void delete_node(node* head) while(1) { node* pointer; + if (head==0) break; free(head->string); pointer=head; head=head->next; free(pointer); - if (head==0) break; } } diff --git a/2025.05.23/dist/Kochubei_DS/inputs/empty.txt b/2025.05.23/dist/Kochubei_DS/inputs/empty.txt new file mode 100644 index 0000000..e69de29 diff --git a/2025.05.23/dist/Kochubei_DS/inputs/one.txt b/2025.05.23/dist/Kochubei_DS/inputs/one.txt new file mode 100755 index 0000000..3c858ac --- /dev/null +++ b/2025.05.23/dist/Kochubei_DS/inputs/one.txt @@ -0,0 +1 @@ +hello 109 \ No newline at end of file diff --git a/2025.05.23/dist/Kochubei_DS/inputs/test.txt b/2025.05.23/dist/Kochubei_DS/inputs/test.txt new file mode 100755 index 0000000..7455be8 --- /dev/null +++ b/2025.05.23/dist/Kochubei_DS/inputs/test.txt @@ -0,0 +1,19 @@ +a +b +a +b +a +b +b +b +b +b +a +b +c +d +e +e +e +f +f \ No newline at end of file diff --git a/2025.05.23/dist/Kochubei_DS/inputs/two.txt b/2025.05.23/dist/Kochubei_DS/inputs/two.txt new file mode 100755 index 0000000..98d42a4 --- /dev/null +++ b/2025.05.23/dist/Kochubei_DS/inputs/two.txt @@ -0,0 +1,2 @@ + +second line \ No newline at end of file diff --git a/2025.05.23/dist/Kochubei_DS/solve.c b/2025.05.23/dist/Kochubei_DS/solve.c index a03fee1..22f19ef 100644 --- a/2025.05.23/dist/Kochubei_DS/solve.c +++ b/2025.05.23/dist/Kochubei_DS/solve.c @@ -332,6 +332,215 @@ node* solve8(node* head) } + + +node* solve9(node* head) +{ + node* tmp1; + node* tmp2; + node* tmp3; + int was_thrown=0; + int last_eq=0; + tmp1=head; + if (head->next==0) + { + return head; + } + if (head->next->next==0) + { + return head; + } + tmp1=head; + tmp2=head->next; + tmp3=head->next->next; + while(tmp3->next!=0) + { + if (was_thrown==0) + { + if (strcmp(tmp1->string, tmp2->string)<=0 && strcmp(tmp2->string, tmp3->string)>=0) + { + if (strcmp(tmp2->string, tmp3->string)==0) + { + last_eq=1; + } + else + { + last_eq=0; + } + free(tmp2->string); + tmp2->string=0; + was_thrown=1; + } + else + { + was_thrown=0; + } + } + else + { + if (last_eq==1 && strcmp(tmp2->string, tmp3->string)>=0) + { + if (strcmp(tmp2->string, tmp3->string)==0) + { + last_eq=1; + } + else + { + last_eq=0; + } + free(tmp2->string); + tmp2->string=0; + was_thrown=1; + } + else + { + was_thrown=0; + } + } + tmp1=tmp2; + tmp2=tmp3; + tmp3=tmp3->next; + } + tmp1=head; + tmp2=head->next; + tmp3=head->next->next; + while(1) + { + if (tmp2->string==0) + { + free(tmp2); + tmp1->next=tmp3; + if (tmp3->next==0) + { + break; + } + tmp2=tmp3; + tmp3=tmp3->next; + } + else + { + if (tmp3->next==0) + { + break; + } + tmp1=tmp2; + tmp2=tmp3; + tmp3=tmp3->next; + } + } + return head; +} + + + + +node* solve10(node* head) +{ + node* tmp1; + node* tmp2; + node* tmp3; + int last=0; + if (head->next==0) + { + return head; + } + tmp1=head; + tmp2=head->next; + while(1) + { + if (strcmp(tmp1->string, tmp2->string)>=0) + { + free(tmp1->string); + tmp1->string=0; + last=1; + } + else + { + if (last==1) + { + free(tmp1->string); + tmp1->string=0; + last=0; + } + } + if (tmp2->next==0) + { + break; + } + tmp1=tmp2; + tmp2=tmp2->next; + } + + if (last==1) + { + free(tmp2->string); + tmp2->string=0; + } + tmp1=head; + tmp2=head->next; + if (head->next->next==0) + { + if (tmp1->string==0) + { + free(tmp1); + free(tmp2); + return 0; + } + else + { + return head; + } + } + tmp3=head->next->next; + while(1) + { + if (tmp2->string==0) + { + free(tmp2); + tmp1->next=tmp3; + if (tmp3->next==0) + { + if (tmp3->string==0) + { + tmp1->next=0; + free(tmp3); + } + break; + } + tmp2=tmp3; + tmp3=tmp3->next; + } + else + { + if (tmp3->next==0) + { + if (tmp3->string==0) + { + tmp2->next=0; + free(tmp3); + } + break; + } + tmp1=tmp2; + tmp2=tmp3; + tmp3=tmp3->next; + } + } + if (head->string==0) + { + node* ret=head->next; + free(head); + return ret; + } + return head; +} + + + + + + +/*/ node* solve9(node* head) { char s[1]={'\0'}; @@ -423,7 +632,6 @@ node* solve9(node* head) return head; } - node* solve10(node* head) { @@ -499,7 +707,7 @@ node* solve10(node* head) -/*/ + node* solve10(node* head) { int flag=0; @@ -540,7 +748,7 @@ node* solve10(node* head) copy_node(ptr2, &tmp2); copy_node(ptr3, &tmp3); flag=0; - + ptr1->next=ptr3; free(ptr2->string); free(ptr2); @@ -584,7 +792,7 @@ node* solve10(node* head) printf("DELETED 1\n"); print_node(100, base.next); } - + else { if (flag==1) @@ -601,7 +809,7 @@ node* solve10(node* head) copy_node(ptr2, &tmp2); copy_node(ptr3, &tmp3); flag=0; - + ptr1->next=ptr3; free(ptr2->string); free(ptr2); @@ -629,7 +837,7 @@ node* solve10(node* head) } } - + } return base.next; }