fork(2) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct Lista lista;
  6.  
  7. struct Lista {
  8. char *nome;
  9. lista *prox;
  10. };
  11.  
  12. void adicionar(lista **l, char *nome) {
  13.  
  14. lista *novo = malloc(sizeof(lista));
  15. novo->nome = malloc(strlen(nome) + 1 * sizeof(char));
  16. strcpy(novo->nome, nome);
  17. novo->prox = *l;
  18. *l = novo;
  19. }
  20.  
  21. void ordenar(lista **l) {
  22.  
  23. if(*l == NULL || (*l)->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento
  24. lista *aux = *l, *t;
  25. char s[100]; //precisa de espacao suficiente para armazenar o nome
  26.  
  27. while(aux != NULL) {
  28. t = aux->prox;
  29. while(t != NULL) {
  30. if(strcmp(aux->nome, t->nome) > 0) { //se vir depois
  31. strcpy(s, aux->nome);
  32. strcpy(aux->nome, t->nome);
  33. strcpy(t->nome, s);
  34. }
  35. t = t->prox;
  36. }
  37. aux = aux->prox;
  38. }
  39. }
  40. void exibir(lista *l) {
  41.  
  42. printf("[ ");
  43. while(l != NULL) {
  44. printf("%s %s", l->nome, (l->prox) != NULL ? ", " : "]");
  45. l = l->prox;
  46. }
  47. printf("\n");
  48. }
  49.  
  50. int main()
  51. {
  52. lista *l = NULL;
  53.  
  54. adicionar(&l, "ana");
  55. adicionar(&l, "joao");
  56. adicionar(&l, "leo");
  57. adicionar(&l, "beto");
  58. adicionar(&l, "katia");
  59.  
  60. ordenar(&l);
  61.  
  62. exibir(l);
  63.  
  64. return 0;
  65. }
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
[ ana , beto , joao , katia , leo ]