Advertisement
Guest User

queuq

a guest
May 17th, 2013
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. /* queue */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. struct queue
  6. {
  7.     void *data;
  8.     struct queue *next;
  9. };
  10. typedef struct queue QUEUE;
  11.  
  12. /* очередь пуста ? */
  13. inline is_queue_empty (QUEUE *head) {return head == NULL;}
  14.  
  15. void   enqueue (QUEUE **head, QUEUE **tail, void *data);
  16. void  *dequeue (QUEUE **head, QUEUE **tail);
  17.  
  18. int main (void)
  19. {
  20.     QUEUE *qtail = NULL, *qhead = NULL;
  21.     FILE *fin, *fout;
  22.     int curr_value, prev_value, first = 0;
  23.  
  24.     if ((fin = fopen("input1.txt", "r")) != NULL)
  25.     {
  26.         while (!feof(fin))
  27.         {
  28.             fscanf(fin, "%d", &curr_value);
  29.             if (first)
  30.             {
  31.                 prev_value = curr_value;
  32.                 enqueue(&qhead, &qtail, (int *)prev_value);
  33.                 first = 0;
  34.             }
  35.             else if (curr_value != prev_value)
  36.             {
  37.                 prev_value = curr_value;
  38.                 enqueue(&qhead, &qtail, (int *)prev_value);
  39.             }            
  40.         }
  41.         fclose(fin);
  42.        
  43.         if ((fout = fopen("output1.txt", "w")) != NULL)
  44.         {
  45.             while (!(is_queue_empty(qhead)))
  46.                 fprintf(fout, "%d\n", dequeue(&qhead, &qtail));
  47.            
  48.             fclose(fout);
  49.         }
  50.         else
  51.             puts("file could not be created!");
  52.     }
  53.     else
  54.         puts("file could not be opened!");
  55.    
  56.    
  57.     system("pause");
  58.     return 0;
  59. }
  60.  
  61.  
  62. /* поставить в очередь */
  63. void enqueue (QUEUE **head, QUEUE **tail, void *data)
  64. {
  65.     QUEUE *in = (QUEUE *) malloc(sizeof(QUEUE));
  66.     if (in != NULL)
  67.     {
  68.         in->data = data;
  69.         in->next = NULL;
  70.        
  71.         if (*head == NULL)
  72.             *head = in;
  73.         else
  74.             (*tail)->next = in;
  75.        
  76.         *tail = in;
  77.     }
  78. }
  79.  
  80. /* удалить из очереди */
  81. void *dequeue (QUEUE **head, QUEUE **tail)
  82. {
  83.     QUEUE *tmp;
  84.     void *data;
  85.  
  86.     data = (*head)->data;
  87.     tmp = *head;
  88.     *head = (*head)->next;
  89.  
  90.     if (*head == NULL)
  91.        *tail = NULL;
  92.    
  93.     free(tmp);
  94.     return data;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement