Пример циклической очереди на Turbo C.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by IgrikX, 28 Mar 2010.

  1. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    Есть у кого пример циклической очереди на С. Срочно нужен!
     
  2. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    2IgrikX - вот схема однонаправленной (не деки) кольцевой очереди

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    typedef struct queue
    {
    	struct node *head;
    	struct node *tail;
    	size_t count;
    } queue;
    
    typedef struct node
    {
    	struct node *prev;
    	struct node *next;
    	void *data;
    } node;
    
    queue *new_queue(queue *q)
    {
    	q = malloc(sizeof(*q));
    	q->count = 0;
    	q->head = NULL;
    	q->tail = NULL;
    	return q;
    }
    
    typedef void item;
    
    node *add_item_queue(queue *q, item *it, size_t size)
    {
    	node *n = malloc(sizeof(*n));
    	if (q->count == 0)
    	{
    		q->head = n;
    		n->next = NULL;
    		n->prev = NULL;
    	}
    	else
    	{
    		n->next = q->head;
    		n->prev = q->tail;
    		q->tail->next = n;
    	}
    	q->tail = n;
    	q->count++;
    	n->data = malloc(size);
    	memmove(n->data, it, size);
    	return n;
    }
    
    node *get_queue_head(queue *q)
    {
    	return q->head;
    }
    
    int main(void)
    {
    	queue *q = NULL;
    	node *n;
    	q = new_queue(q);
    	add_item_queue(q, "Phoenix", 8);
    	add_item_queue(q, "Zombie", 7);
    	add_item_queue(q, "Paradox", 8);
    	n = get_queue_head(q);
    	for (;;)
    	{
    		puts(n->data);
    		n = n->next;
    	}
    }
    
    несложно переделать в кольцевой дек