Сформировать новый список в котором элементы расположены в порядке возростания - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан список F=<1,8,9,0,1,3,2,4,1,12,23,1,23,2,19,1>.Сформирова ть новый список в котором элементы расположены в порядке возростания.Программка не работает,незнаю где ошибка))Что-то не так с SortList(((

Решение задачи: «Сформировать новый список в котором элементы расположены в порядке возростания»

textual
Листинг программы
#include "stdafx.h"
#include <locale.h>
#include <conio.h>
struct Node {
    int value;
    Node *link;
};
typedef struct Node NODE;
void initNode(NODE **head,int val);
void addNodeToEnd(NODE *head,int val);
void VuvestuSpusok (NODE *head,char text[]="");
void SortList(NODE **head);
void DodatuZna4ennya(NODE **head,int val);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "Rusian");
    NODE *firstHead=NULL,*SpusokNew=NULL;
    int masuv[]={1,8,9,0,1,3,2,4,1,12,23,1,23,2,19,1};
    for (int i=0;i<16;i++)
    {
        DodatuZna4ennya(&firstHead, masuv[i]);
    }
    VuvestuSpusok(firstHead,"начальный");
    SortList(&firstHead);
    VuvestuSpusok(SpusokNew,"новый");
    getch();
    return 0;
}
 
void initNode(NODE **head,int val)
{
    *head = new NODE;
    (*head)->value=val;
    (*head)->link=NULL;
}
void addNodeToEnd(NODE *head,int val)
{
    NODE *new_node, *temp=head;
    while (1)
    {
        if (temp->link==NULL) {break;}
        else {temp=temp->link;}
    }
    new_node = new NODE;
    new_node->value=val;
    new_node->link=temp->link;
    temp->link=new_node;
}
void VuvestuSpusok (NODE *head,char text[])
{
    printf("spusok %s --> ",text);
    NODE *temp=head;
    while (1)
    {
        if(temp == NULL)
        {
            printf("\n");
            break;
        }
        else
        {
            printf("%d",temp->value);
            temp=temp->link;
        }
    }
}
void SortList(NODE **head)
{
    NODE *node_old1=*head;
    NODE *node_old2;
    NODE *node_new1,*node_new2;
 
    node_new1=node_old1;
    node_old2=node_old1->link;    
    node_new1->link =NULL;
    node_old1=node_old2;
 
    while (node_old1!=NULL)
    {
        if (node_old1->value < node_new1->value)
        {
            node_old2=node_old1->link;
            node_old1->link = node_new1;
            node_new1=node_old1;
            node_old1=node_old2;
        }
        else
        {
            node_new2=node_new1;
            while (node_new2->link !=NULL)
            {
                if ((node_new2->link)->value > (node_old1->value)) break;
                node_new2 = node_new2->link;                                    
            }            
            node_old2=node_old1->link;
            node_old1->link = node_new2->link;
            node_new2->link=node_old1;
            node_old1=node_old2;
        }
 
    }
    *head=node_new1;
}
void DodatuZna4ennya(NODE **head,int val)
{
    if((*head)==NULL){initNode(&(*head),val);}
    else{addNodeToEnd((*head),val);}
}

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


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

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

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