fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct Elemento {
  5. int valor;
  6. struct Elemento*prox;
  7. } Elemento;
  8.  
  9. typedef struct Lista {
  10. Elemento*Inicio;
  11. Elemento*Fim;
  12. } Lista;
  13.  
  14. Lista*CriandoLista() {
  15. Lista*lista=(Lista*)malloc(sizeof(Lista));
  16. lista->Inicio=NULL;
  17. lista->Fim=NULL;
  18. return lista;
  19. }
  20.  
  21. Elemento*CriandoElemento(int n) {
  22. Elemento*novo=(Elemento*)malloc(sizeof(Elemento));
  23. novo->prox=NULL;
  24. novo->valor=n;
  25. return novo;
  26. }
  27.  
  28. void AddLista(Lista*lista,Elemento*novo) {
  29. if(lista->Inicio==NULL) {
  30. lista->Inicio=novo;
  31. lista->Fim=lista->Inicio;
  32. } else {
  33. lista->Fim->prox=novo;
  34. lista->Fim=novo;
  35. }
  36. }
  37.  
  38. void Imprimir(Lista*lista) {
  39. Elemento*aux=lista->Inicio;
  40. while(aux!=NULL) {
  41. printf(" %d ",aux->valor);
  42. aux=aux->prox;
  43. }
  44. printf("\n");
  45. }
  46.  
  47. void AddOrdenado(Lista*nvlista, Elemento* elemento) {
  48. if (nvlista->Inicio == NULL){
  49. nvlista->Inicio = nvlista->Fim = elemento;
  50. return;
  51. }
  52.  
  53. Elemento *atual = nvlista->Inicio;
  54. Elemento *anterior = NULL;
  55. while (atual != NULL && atual->valor < elemento->valor){
  56. anterior = atual;
  57. atual = atual->prox;
  58. }
  59.  
  60. if (atual == NULL){ //novo maior que todos
  61. nvlista->Fim->prox = elemento;
  62. nvlista->Fim = elemento;
  63. }
  64. else {
  65. if (anterior == NULL){
  66. elemento->prox = nvlista->Inicio;
  67. nvlista->Inicio = elemento;
  68. }
  69. else {
  70. elemento->prox = anterior->prox;
  71. anterior->prox = elemento;
  72. }
  73. }
  74. }
  75. void Ordenar(Lista*lista) {
  76. Lista*nvlista=CriandoLista();
  77. Elemento *no_atual = lista->Inicio;
  78. while(no_atual != NULL) {
  79. Elemento *novo = CriandoElemento(no_atual->valor);
  80. AddOrdenado(nvlista, novo);
  81. no_atual = no_atual->prox;
  82. }
  83. Imprimir(nvlista);
  84. }
  85.  
  86. int main() {
  87. Lista*lista=CriandoLista();
  88. int n[]= {5,10,9,1,4,2,14,21,7};
  89. for(int i=0; i<sizeof(n)/sizeof(int); i++) {
  90. AddLista(lista,CriandoElemento(n[i]));
  91. }
  92. Imprimir(lista);
  93. Ordenar(lista);
  94. }
  95.  
Success #stdin #stdout 0s 4216KB
stdin
Standard input is empty
stdout
 5  10  9  1  4  2  14  21  7 
 1  2  4  5  7  9  10  14  21