Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* queue */
- #include <stdio.h>
- #include <stdlib.h>
- struct queue
- {
- void *data;
- struct queue *next;
- };
- typedef struct queue QUEUE;
- /* очередь пуста ? */
- inline is_queue_empty (QUEUE *head) {return head == NULL;}
- void enqueue (QUEUE **head, QUEUE **tail, void *data);
- void *dequeue (QUEUE **head, QUEUE **tail);
- int main (void)
- {
- QUEUE *qtail = NULL, *qhead = NULL;
- FILE *fin, *fout;
- int curr_value, prev_value, first = 0;
- if ((fin = fopen("input1.txt", "r")) != NULL)
- {
- while (!feof(fin))
- {
- fscanf(fin, "%d", &curr_value);
- if (first)
- {
- prev_value = curr_value;
- enqueue(&qhead, &qtail, (int *)prev_value);
- first = 0;
- }
- else if (curr_value != prev_value)
- {
- prev_value = curr_value;
- enqueue(&qhead, &qtail, (int *)prev_value);
- }
- }
- fclose(fin);
- if ((fout = fopen("output1.txt", "w")) != NULL)
- {
- while (!(is_queue_empty(qhead)))
- fprintf(fout, "%d\n", dequeue(&qhead, &qtail));
- fclose(fout);
- }
- else
- puts("file could not be created!");
- }
- else
- puts("file could not be opened!");
- system("pause");
- return 0;
- }
- /* поставить в очередь */
- void enqueue (QUEUE **head, QUEUE **tail, void *data)
- {
- QUEUE *in = (QUEUE *) malloc(sizeof(QUEUE));
- if (in != NULL)
- {
- in->data = data;
- in->next = NULL;
- if (*head == NULL)
- *head = in;
- else
- (*tail)->next = in;
- *tail = in;
- }
- }
- /* удалить из очереди */
- void *dequeue (QUEUE **head, QUEUE **tail)
- {
- QUEUE *tmp;
- void *data;
- data = (*head)->data;
- tmp = *head;
- *head = (*head)->next;
- if (*head == NULL)
- *tail = NULL;
- free(tmp);
- return data;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement