Переделать двусвязный список в односвязный список - 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;
}

Объяснение кода листинга программы

В этом коде создается список символов, вводимых пользователем. Затем происходит преобразование списка в односвязный список. Код выводит на экран все слова, состоящие из одинаковых букв, и подсчитывает количество таких слов. После этого исходный двусвязный список освобождается от выделенной для него памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы