Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. //lista duplamente encadeada
  4.  
  5. typedef struct elemento Elemento;
  6. struct elemento{
  7. int info;
  8. Elemento* prox;
  9. Elemento* ant;
  10. };
  11.  
  12. Elemento* lista_cria(void){
  13. return NULL;
  14. }
  15.  
  16. //insere no começo da lista
  17. Elemento* lista_insere(Elemento* inicio,int val){
  18. Elemento* novo = (Elemento*)malloc(sizeof(Elemento));
  19. novo->prox = NULL;
  20. novo->ant = NULL;
  21. novo->info = val; //coloca o valor antes do primeiro (que é o "lista")
  22.  
  23. if(inicio==NULL){ //se a lista for nula, ou seja, se o elemento que colocou for o unico,
  24. return novo; //então retorna ele, que vai ser a lista na main
  25. }
  26. else{
  27. novo->prox = inicio;
  28. inicio->ant = novo;
  29. }
  30. return novo;
  31. }
  32.  
  33. //insere no fim da lista - ver: http://www.cprogressivo.net/2013/10/Lista-simplesmente-encadeada-com-cabeca-em-C-Inserindo-nos-no-inicio-e-fim.html
  34. Elemento* lista_insere_fim(Elemento* fim, int val){
  35. Elemento* novo = (Elemento*)malloc(sizeof(Elemento));
  36. novo->info = val; //coloca o valor na struct
  37. novo->prox = NULL; //e o proximo dele vai ser NULL (pq quando o proximo é NULL é pq ele está na ultima posicao)
  38. novo->ant = NULL;
  39.  
  40. if(fim==NULL){ //se a lista for nula, ou seja, se o elemento que colocou for o unico,
  41. return novo; //então retorna ele, que vai ser a lista na main
  42. }
  43. else{ //se tiver mais elementos na lista antes de adicionar esse
  44. fim->prox = novo; //fim->prox é o ultimo, so que agr o novo que quer adicionar que deve ser o ultimo
  45. novo->ant = fim; //o anterior ao novo (que agr é o ultimo) vai receber o fim antigo
  46. }
  47. return novo; //retorna o novo que agr é o novo fim (pq na main recebe o fim)
  48. }
  49.  
  50. //função imprime: imprime os valores dos elementos
  51. void lista_imprime(Elemento* inicio){
  52. Elemento* p;
  53.  
  54. if(inicio==NULL){
  55. printf("\n-----Lista Vazia!-----\n");
  56. }
  57. for(p=inicio;p!=NULL;p=p->prox){
  58. printf("valor = %d\n", p->info);
  59. }
  60. system("pause");
  61. }//fim da função imprime
  62.  
  63. int main(){
  64. Elemento* inicio; //é a lista em si
  65. Elemento* fim;
  66.  
  67. inicio = lista_cria();
  68. fim = lista_cria();
  69.  
  70.  
  71. printf("\n-----Inserir no começo-----\n");
  72. inicio = lista_insere(inicio, 20);
  73. fim=inicio;
  74. inicio = lista_insere(inicio, 30);
  75. inicio = lista_insere(inicio, 40);
  76. lista_imprime(inicio);
  77.  
  78. printf("\n-----Inserir no fim da lista-----\n");
  79. fim = lista_insere_fim(fim, 22);
  80. fim = lista_insere_fim(fim, 33);
  81. fim = lista_insere_fim(fim, 44);
  82. lista_imprime(inicio);
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement