Advertisement
Guest User

Untitled

a guest
May 28th, 2015
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.16 KB | None | 0 0
  1. /* Laboratório 1 Exercício 2
  2.  * Remoção de valores contidos em um intervalo(especificado por entrada do usuário)
  3.  * de uma lista encadeada dinâmica
  4.  * Programador: Diego Dillenburg Bueno Data: 20 de Março de 2014
  5.  * Compilador: GCC 4.8.2 */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. struct node {
  11.     int     info;
  12.     struct node *next;
  13. };
  14.  
  15. /* insere valores na lista encadeada dinâmica */
  16. int insertList(struct node *root){
  17.  
  18. /* ponteiro para percorrer a lista */
  19. struct node *p;
  20.  
  21. int i,
  22.     valor;
  23.  
  24. p = root;
  25.  
  26. /* preenchendo a lista */
  27. for(i=0; i<10; i++){
  28.     printf("%s%d%s\n", "Digite o ", i+1, "o valor da lista:");
  29.     scanf("%d", &valor);
  30.     p->info = valor;
  31.    
  32. /* criando um novo nó no final da lista e alocando um valor */
  33.     p->next = malloc(sizeof(struct node));
  34.     p = p->next;
  35.     p->next = 0;
  36. }
  37.  
  38. p->next = 0;
  39.  
  40. return 0;
  41. }
  42.  
  43. /* imprime a lista */
  44. int printList(struct node *root){
  45.  
  46. /* ponteiro para percorer a lista */
  47. struct node *p;
  48.  
  49. p = root;
  50.  
  51. int i = 0;          // número do nó
  52.  
  53. /* imprimindo a lista */
  54. if (p != 0)
  55. while(p->next != 0){
  56.     printf("%s%d%s%d\n", "No: ", i, " Valor: ", p->info);
  57.     p = p->next;
  58.     i++;
  59. }
  60.  
  61. return 0;
  62. }
  63.  
  64. /* remove os nós cujo valor(info) estejam contidos em intervalo especificado pelo usuário(vI e vF, sendo vI<vF) */
  65. int removeNode(struct node *root, int vI, int vF){
  66.  
  67. /* ponteiro para percorrer a lista */
  68. struct node *p;
  69. p = root;
  70.  
  71. /* ponteiro auxiliar para remoção de dados da lista */
  72. struct node *pAux;
  73.  
  74.  
  75. while(p->next != 0){
  76.     if(p->next->info >= vI && p->next->info <= vF){
  77.     pAux = p->next;
  78.     p->next = p->next->next;
  79.     free(pAux);
  80.     }
  81.     else p = p->next;
  82. }
  83.  
  84. return 0;
  85. }
  86.  
  87. int main() {
  88.  
  89. int     vI,
  90.     vF;
  91.  
  92. /* inicializando a lista */
  93. struct node *root;
  94. root = malloc(sizeof(struct node));
  95. root->next = 0;
  96.  
  97. insertList(root);
  98. printf("%s\n", "Lista inicial:");
  99. printList(root);
  100. printf("%s\n", "Por favor entre com um intervalo de dados a serem removidos da lista:");
  101. printf("%s", "Valor inicial: ");
  102. scanf("%d", &vI);
  103. printf("%s", "Valor final: ");
  104. scanf("%d", &vF);
  105. removeNode(root, vI, vF);
  106. printf("%s\n", "Lista final:");
  107. printList(root);
  108.  
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement