Author: Not specified Language: c
Description: Not specified Timestamp: 2013-05-24 13:22:04 +0000
View raw paste Reply
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define BUF_LEN 1234
  6.  
  7. typedef struct _list_node2
  8. {
  9.     struct _list_node2 *pred;
  10.     struct _list_node2 *next;
  11.     char *s;
  12.  
  13. } list_node2;
  14.  
  15. list_node2 *read_list2(const char *filename);
  16. void delete_list2(list_node2 *head);
  17. void print_list2(const list_node2 *head);
  18.  
  19. list_node2 *read_list2(const char *filename)
  20. {
  21.     list_node2 *head=0;
  22.     FILE *fp;
  23.     char buf[BUF_LEN];
  24.     list_node2 *tail, *curr;
  25.     if (!(fp=fopen(filename,"r"))) return 0;
  26.     if (!(fgets(buf,BUF_LEN,fp)))
  27.     {
  28.         fclose(fp);
  29.         return 0;
  30.     }
  31.     head=(list_node2*) malloc (sizeof(list_node2));
  32.     if (!head)
  33.     {
  34.         fclose(fp);
  35.         return 0;
  36.     }
  37.     (*head).pred=0;
  38.     (*head).next=0;
  39.     (*head).s=0;
  40.     (*head).s=(char*) malloc (strlen(buf)+1);
  41.     if(!(*head).s)
  42.     {
  43.         fclose(fp);
  44.         free(head);
  45.         return 0;
  46.     }
  47.     strcpy((*head).s,buf);
  48.     tail=head;
  49.     while (fgets(buf,BUF_LEN,fp))
  50.     {
  51.         curr=(list_node2*) malloc (sizeof(list_node2));
  52.         if(!curr)
  53.         {
  54.             fclose(fp);
  55.             delete_list2(head);
  56.             return 0;
  57.         }
  58.         (*curr).pred=0;
  59.         (*curr).next=0;
  60.         (*curr).s=0;
  61.         (*curr).s=(char*) malloc (strlen(buf)+1);
  62.         if (!(*curr).s)
  63.         {
  64.             fclose(fp);
  65.             delete_list2(head);
  66.             return 0;
  67.         }
  68.         strcpy((*curr).s,buf);
  69.         (*curr).next=0;
  70.         (*curr).pred=tail;
  71.         (*tail).next=curr;
  72.         tail=curr;
  73.     }
  74.     fclose(fp);
  75.     return head;
  76. }
  77.  
  78.  
  79. void delete_list2(list_node2 *head)
  80. {
  81.     list_node2 *curr, *next;
  82.     for (curr=head; curr; curr=next)
  83.     {
  84.         next=(*curr).next;
  85.         free ((*curr).s);
  86.         free(curr);
  87.     }
  88. }
  89.  
  90. void print_list2(const list_node2 *head)
  91. {
  92.     const list_node2 *curr; // mojno mb i const
  93.     for (curr=head; curr; curr=(*curr).next)
  94.     //printf("%s\n",(*curr).s);
  95.     printf("%s\n",(*curr).s);
  96. }
  97.  
  98.  
  99.  
  100. list_node2 *f9(list_node2 *ptr1, list_node2 *ptr2)
  101. {
  102.     list_node2 *head, *temp1, *temp2;
  103.     head=ptr1;
  104.  
  105.     for(;ptr1 != NULL;ptr1=ptr1->next)
  106.     {
  107.         if(ptr1->s == ptr2->s)
  108.         {
  109.             temp1=ptr1;
  110.             temp2=ptr2;
  111.  
  112.             for(;temp1 && temp1->s == temp2->s; temp1=temp1->next,temp2=temp2->next)
  113.             {
  114.  
  115.                 if(temp2->next == NULL)
  116.                 {
  117.                     if(ptr1->pred)
  118.                     {
  119.                         ptr1->pred->next=temp1->next;
  120.                         if (ptr1->pred->next)
  121.                             ptr1->pred->next->pred=ptr1->pred;
  122.  
  123.                     }
  124.  
  125.                     else
  126.                     {
  127.                         head=temp1->next;
  128.                         head->pred=NULL;
  129.                     }
  130.  
  131.                     break;
  132.  
  133.                 }
  134.  
  135.             }
  136.  
  137.         }
  138.  
  139.     }
  140.     return head;
  141. }
  142.  
  143.  
  144.  
  145. int main(void)
  146. {
  147.       list_node2 *head1, *head2;
  148.       const char *name="a1.txt";
  149.       head1=read_list2(name);
  150.       print_list2(head1);
  151.       head2=read_list2("a2.txt");
  152.       head1=f9(head1, head2);
  153.       printf("OTBET\n");
  154.       print_list2(head1);
  155.       delete_list2(head1);
  156.       delete_list2(head2);
  157.       return 0;
  158. }
  159.  
  160.  
  161.  
  162.  
  163.  
View raw paste Reply