Ordenar lista dinamica em c
Eu preciso de ajuda com esse trabalho, para ordenar uma lista dinamica em c, alguem pode me ajudar?
#include <stdio.h>
#include <stdlib.h>
struct sno
{
int info;
sno *prox;
};
void mostrarLista(sno *lis)
{
printf("lista -> ");
while (lis != NULL)
{
printf("%d -> ", lis->info);
lis = lis->prox;
}
printf("NULL");
}
void iniciarLista(sno **lis)
{
*lis = NULL;
}
void inserirInicioLista(sno **lis, int v)
{
sno *no;
no = (sno *) malloc(sizeof(sno));
no->info = v;
no->prox = *lis;
*lis = no;
}
void inserirFimLista(sno **lis, int v)
{
sno *no, *ult;
if (*lis == NULL) // inserir no início da lista
inserirInicioLista(lis, v);
else
{
ult = *lis; // ult recebe o início da lista (no main, lista)
while (ult->prox != NULL)
{
ult = ult->prox;
}
no = (sno *) malloc(sizeof(sno));
no->info = v;
no->prox = NULL;
ult->prox = no;
}
}
void inserirOrdemLista(sno **lis, int v){
sno *atual, *novo, *anterior;
novo = (lis *) malloc(sizeof(lista));
atual = *lis;
anterior = NULL;
novo->info = v;
if(atual == NULL){
novo->prox = NULL;
*lis = novo;
} else{
while(atual != NULL && atual->info < *lis){
anterior = atual;
atual = atual->prox;
}
novo->prox = atual;
if(anterior == NULL){
*lis = novo;
} else{
anterior->prox = novo;
}
}
}
int main()
{
sno *lista;
iniciarLista(&lista); // lista recebe NULL (vazia)
inserirInicioLista(&lista, 30);
inserirInicioLista(&lista, 10);
inserirFimLista(&lista, 20);
inserirFimLista(&lista, 35);
mostrarLista(lista);
printf("\n\n\n");
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct sno
{
int info;
sno *prox;
};
void mostrarLista(sno *lis)
{
printf("lista -> ");
while (lis != NULL)
{
printf("%d -> ", lis->info);
lis = lis->prox;
}
printf("NULL");
}
void iniciarLista(sno **lis)
{
*lis = NULL;
}
void inserirInicioLista(sno **lis, int v)
{
sno *no;
no = (sno *) malloc(sizeof(sno));
no->info = v;
no->prox = *lis;
*lis = no;
}
void inserirFimLista(sno **lis, int v)
{
sno *no, *ult;
if (*lis == NULL) // inserir no início da lista
inserirInicioLista(lis, v);
else
{
ult = *lis; // ult recebe o início da lista (no main, lista)
while (ult->prox != NULL)
{
ult = ult->prox;
}
no = (sno *) malloc(sizeof(sno));
no->info = v;
no->prox = NULL;
ult->prox = no;
}
}
void inserirOrdemLista(sno **lis, int v){
sno *atual, *novo, *anterior;
novo = (lis *) malloc(sizeof(lista));
atual = *lis;
anterior = NULL;
novo->info = v;
if(atual == NULL){
novo->prox = NULL;
*lis = novo;
} else{
while(atual != NULL && atual->info < *lis){
anterior = atual;
atual = atual->prox;
}
novo->prox = atual;
if(anterior == NULL){
*lis = novo;
} else{
anterior->prox = novo;
}
}
}
int main()
{
sno *lista;
iniciarLista(&lista); // lista recebe NULL (vazia)
inserirInicioLista(&lista, 30);
inserirInicioLista(&lista, 10);
inserirFimLista(&lista, 20);
inserirFimLista(&lista, 35);
mostrarLista(lista);
printf("\n\n\n");
system("pause");
return 0;
}
Lucas Marcolino
Curtidas 0