1. 程式人生 > >循環隊列實現

循環隊列實現

struct div i++ printf alloc 循環隊列 reat print span

queue.h

#ifndef QUEUE_
#define QUEUE_

#define SIZE 10

typedef int data_t;

typedef struct head{
        data_t data[SIZE];
        int front;
        int rear;
}queue_t;

queue_t *queue_creat();

int queue_is_empty(queue_t *head);

int queue_is_full(queue_t *head);

void queue_clear(queue_t *head);

int queue_en(queue_t *head,data_t data); data_t queue_de(queue_t *head); void queue_show(queue_t *head); void queue_detory(queue_t **head); #endif

queue.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>

#include "queue.h"


queue_t *queue_creat()
{
        queue_t 
*head = (queue_t *)malloc(sizeof(queue_t)); bzero(head,sizeof(queue_t)); head->front = 0; head->rear = 0; return head; } int queue_is_empty(queue_t *head) { return head->front == head->rear; } int queue_is_full(queue_t *head) { return head->rear - head->front == SIZE; }
void queue_clear(queue_t *head) { head->rear = head->front; } int queue_en(queue_t *head,data_t data) { if(queue_is_full(head)) { printf("queue is fulll\n"); return -1; } head->data[head->rear%SIZE] = data; head->rear++; return 0; } data_t queue_de(queue_t *head) { if(queue_is_empty(head)) { printf("queue is empty\n"); return -1; } data_t data = head->data[head->front%SIZE]; head->front++; return data; } void queue_show(queue_t *head) { int i; for(i=head->front;i<head->rear;i++) { printf("%d\t",head->data[i%SIZE]); } printf("\n"); } void queue_destory(queue_t **head) { free(*head); *head = NULL; }

main.c

#include <stdio.h>

#include "queue.h"

int main()
{
        queue_t *head = queue_creat();

        int n=10;
        while(n--)
        {
                queue_en(head,n+1);
        }

        queue_show(head);
        queue_destory(&head);

        return 0;
}

循環隊列實現