Переделать двусвязный список в односвязный список - C (СИ)
Формулировка задачи:
//--------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <conio.h> //--------------------------------------------------------------------------- void main(void) {char c; int key=0; struct symbol{ char symb; struct symbol *next; struct symbol *prev; }*Start,*Temp; printf ("Для завершения ввода строки нажмите Enter\n"); Start=(struct symbol *)malloc(sizeof(struct symbol)); Start->symb=getchar(); Start->prev=NULL; if(!Start) { printf("Oshibka raspredelenia pamyati\n"); exit(1); } for (Temp=Start; (c=getchar())!='\n'; ) { Temp->next=(struct symbol *)malloc(sizeof(struct symbol)); if(!(Temp->next)) { printf("Oshibka raspredelenia pamyati\n"); exit(1); } Temp->next->prev=Temp; Temp=Temp->next; Temp->symb=c; Temp->next=NULL; } printf ("\nNaydennie slova c 2 (kak minimum) povtor sosed bukvi:"); for (Temp=Start; (Temp->next)!=NULL; Temp=Temp->next) { if (((Temp->symb)!=' ') && ((Temp->symb)==(Temp->next->symb))) { putchar('\n'); key++; for (; ((Temp!=Start) && ((Temp->symb)!=' ')); Temp=Temp->prev) {} for (Temp=Temp->next; (((Temp->symb)!=' ') && (Temp!=NULL)); Temp=Temp->next) {putchar(Temp->symb);} Temp=Temp->prev; } } if (!key) {printf("\nTrebuemih slov not!!!");} else printf("\nНапечатано %d слов", key); while (Start!=NULL) { Temp=Start; Start=Start->next; free(Start); } getch(); }
Прошу вас очень нужно!!!
Решение задачи: «Переделать двусвязный список в односвязный список»
textual
Листинг программы
//--------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> //--------------------------------------------------------------------------- int main() { char c; int key = 0, space; struct symbol { char symb; struct symbol* next; } * start, * temp, *p; printf("Для завершения ввода строки нажмите Enter\n"); start = (struct symbol*) malloc(sizeof(struct symbol)); if (!start) { printf("Oshibka raspredelenia pamyati\n"); return 1; } start->symb = getchar(); start->next = NULL; for (temp = start; (c = getchar()) != '\n';) { temp->next = (struct symbol*)malloc(sizeof(struct symbol)); if (!(temp->next)) { printf("Oshibka raspredelenia pamyati\n"); return 1; } temp = temp->next; temp->symb = c; temp->next = NULL; } space = (start->symb == ' '); for (p = temp = start; temp; temp = temp->next) { if (temp->symb == ' ') { space = 1; } else { if (space) { space = 0; p = temp; } if (temp->next && (temp->symb == temp->next->symb)) { key++; for (; p && (p->symb != ' '); p = p->next) { putchar(p->symb); } putchar('\n'); if (p == NULL) { break; } temp = p; } } } if (!key) { printf("Trebuemih slov not!!!\n"); } else { printf("Напечатано %d слов\n", key); } while (start != NULL) { temp = start; start = start->next; free(temp); } system("pause"); return 0; }
Объяснение кода листинга программы
В этом коде создается список символов, вводимых пользователем. Затем происходит преобразование списка в односвязный список. Код выводит на экран все слова, состоящие из одинаковых букв, и подсчитывает количество таких слов. После этого исходный двусвязный список освобождается от выделенной для него памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д