Author: Not specified Language: c
Description: Not specified Timestamp: 2013-05-24 12:53:17 +0000
View raw paste Reply
  1. //??? 9-?? ??????
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct Item
  6. {
  7.     char c;
  8.     struct Item *next;
  9.     struct Item *prev;
  10. }Item;
  11.  
  12. int getList(Item **pptr); //???? ??????
  13. void putList(Item *ptr); // ????? ??????
  14. Item *deleteList(Item *ptr); //???????? ??????
  15. Item *in(Item *ptr1, Item *ptr2); //???????, ??????? ??????? ?? ?????? ?????? ????????? ??????
  16.  
  17. int main()
  18. {
  19.     int n1,n2;
  20.     Item *ptr1,*ptr2;
  21.     while( puts("enter first string"),n1=getList(&ptr1),puts("enter second string"),n2=getList(&ptr2) )
  22.     {
  23.         if (n1==0 || n2==0)
  24.             return 0;
  25.         printf("final string: ");
  26.         putList(in(ptr1,ptr2));
  27.         ptr1 = deleteList(ptr1);
  28.         ptr2 = deleteList(ptr2);
  29.  
  30.  
  31.     }
  32.     return 0;
  33. }
  34.  
  35. int getList(Item **pptr)
  36. {
  37.     int in=0;
  38.     char buf[21], *str;
  39.     Item *head, *cur;
  40.     head = (Item *)malloc(sizeof(Item));
  41.     cur=head;
  42.     cur->prev=NULL;
  43.     int n, rc = 1;
  44.  
  45.     do
  46.     {
  47.         n = scanf("%20[^\n]", buf);
  48.         if(n < 0)
  49.         {
  50.             deleteList(head);
  51.             head = NULL;
  52.             rc = 0;
  53.  
  54.         }
  55.         if(n > 0)
  56.         {
  57.             for(str = buf; *str != '\0'; ++str)
  58.             {
  59.                 in=1;
  60.                 cur->c = *str;
  61.                 cur->next = (Item *)malloc(sizeof(Item));
  62.                 cur->next->prev = cur;
  63.                 cur = cur->next;
  64.             }
  65.             cur->prev->next=NULL;
  66.         }
  67.         else
  68.         {
  69.  
  70.             scanf("%*c");
  71.         }
  72.  
  73.  
  74.     }
  75.     while(n > 0);
  76.  
  77.     if (in)
  78.         puts("yes");
  79.     else
  80.         head=NULL;
  81.     *pptr = head;
  82.     return rc;
  83. }
  84.  
  85. void putList(Item *ptr)
  86. {
  87.     for(; ptr != NULL; ptr = ptr->next)
  88.         printf("%c", ptr->c);
  89.     printf("\n");
  90. }
  91.  
  92. Item *deleteList(Item *ptr)
  93. {
  94.     Item *tmp = NULL;
  95.     while(ptr != NULL)
  96.     {
  97.         tmp = ptr;
  98.         ptr = ptr->next;
  99.         free(tmp);
  100.     }
  101.     return NULL;
  102. }
  103.  
  104. Item *in(Item *ptr1, Item *ptr2)
  105. {
  106.     Item *head, *temp1, *temp2;
  107.     head=ptr1;
  108.  
  109.     for(;ptr1 != NULL;ptr1=ptr1->next)
  110.     {
  111.         if(ptr1->c == ptr2->c)
  112.         {
  113.             temp1=ptr1;
  114.             temp2=ptr2;
  115.  
  116.             for(;temp1 && temp1->c == temp2->c; temp1=temp1->next,temp2=temp2->next)
  117.             {
  118.  
  119.                 if(temp2->next == NULL)
  120.                 {
  121.                     if(ptr1->prev)
  122.                     {
  123.                         ptr1->prev->next=temp1->next;
  124.                         if (ptr1->prev->next)
  125.                             ptr1->prev->next->prev=ptr1->prev;
  126.  
  127.                     }
  128.  
  129.                     else
  130.                     {
  131.                         head=temp1->next;
  132.                         head->prev=NULL;
  133.                     }
  134.  
  135.                     break;
  136.  
  137.                 }
  138.  
  139.             }
  140.  
  141.         }
  142.  
  143.     }
  144.     return head;
  145. }
  146.  
View raw paste Reply