Val_Kir

2lab7

Jun 29th, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.63 KB | None | 0 0
  1. /*
  2. Сформировать список.
  3. Найти первый и последний нули, удалить узлы между ними.
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #include <string.h>
  10.  
  11. struct Node
  12. {
  13.     int num;
  14.     Node *next;
  15. };
  16.  
  17.  
  18. Node *add_to_list(Node *lnode, int num)
  19. {
  20.     Node *newel = new Node, *l = lnode;
  21.    
  22.     newel->num = num;
  23.     newel->next = NULL;
  24.    
  25.     if(!lnode)
  26.         return newel;
  27.    
  28.     while(l->next)
  29.         l = l->next;
  30.    
  31.     l->next = newel;
  32.    
  33.     return lnode;
  34. }
  35.  
  36. void del_list(Node *lnode)
  37. {
  38.     Node *p_s = lnode;
  39.     Node *p_tmp = p_s;
  40.    
  41.     while(p_s)
  42.     {
  43.         p_s = p_s->next;
  44.         delete p_tmp;
  45.         p_tmp = p_s;
  46.     }
  47. }
  48.  
  49. char* list_to_str(Node *l)
  50. {
  51.     char buf[256];
  52.     char *str = new char[256];
  53.     str[0] = '\0';
  54.     for(; l; l = l->next)
  55.     {
  56.         itoa(l->num, buf, 10);
  57.         str = strcat(str, strcat(buf, " "));
  58.     }
  59.     return str;
  60. }
  61.  
  62. int main()
  63. {
  64.     int n, buff;
  65.     srand(time(0));
  66.  
  67.     Node *z1 = NULL;
  68.     Node *z2 = NULL;
  69.     Node *lnode_i;
  70.     Node *buff1;
  71.     Node *buff2;
  72.     Node *lnode = NULL;
  73.    
  74.     printf("N: ");
  75.     scanf("%d", &n);
  76.     for(int i=0; i<n; ++i)
  77.     {
  78.         buff=rand()%10;
  79.         lnode=add_to_list(lnode, buff);
  80.     }
  81.     printf("Input: %s\n", list_to_str(lnode));
  82.  
  83.     lnode_i = lnode;
  84.     while(lnode_i)
  85.     {
  86.         if(lnode_i->num==0 && z1==NULL)
  87.             z1=lnode_i;
  88.         else if(lnode_i->num == 0 && z1 != NULL)
  89.             z2=lnode_i;
  90.         lnode_i=lnode_i->next;
  91.     }
  92.  
  93.     if(z1 != NULL && z2 != NULL)
  94.     {
  95.         buff1 = z1->next;
  96.         buff2 = buff1;
  97.         while(buff1 != z2)
  98.         {
  99.             buff2 = buff1->next;
  100.             delete buff1;
  101.             buff1 = buff2;
  102.         }
  103.         z1->next = z2;
  104.     }
  105.     printf("Out: %s\n", list_to_str(lnode));
  106.     del_list(lnode);
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment