C语言使用数组实现简单队列

/*
 * queue.h
 *
 *  Created on: Nov 6, 2010
 *      Author: jenson
 */

#ifndef QUEUE_H_
#define QUEUE_H_

typedef struct _queue_ * queue;
typedef int item_type;

struct _queue_{
   item_type * item;
   int head;
   int tail;
   int size;
};
extern queue queue_init(int);
extern int queue_empty(queue);
extern void queue_enqueue(queue,item_type);
extern item_type queue_get(queue);

#endif /* QUEUE_H_ */


/*
 * queue.c
 *
 *  Created on: Nov 6, 2010
 *      Author: jenson
 */

#include "queue.h"
#include <stdio.h>

queue queue_init(int max) {
    queue q = malloc(sizeof(struct _queue_));
    if (q != NULL) {
        q->item = malloc(sizeof(item_type) * (max+1));
        q->size = sizeof(item_type) * max;
        q->head = max;
        q->tail = 0;
        return q;
    }
    perror("queue_init.\n");
    return NULL;
}

int queue_empty(queue q) {
    return (q->head % (q->size / (sizeof(item_type))) == q->tail);
}

void queue_enqueue(queue q, item_type e) {
    q->item[q->tail++] = e;
    q->tail = (q->tail) % (q->size / (sizeof(item_type)));
}

item_type queue_get(queue q) {
    q->head = q->head % (q->size / (sizeof(item_type)));
    return q->item[q->head++];
}

/*
 * main.c
 *
 *  Created on: Nov 6, 2010
 *      Author: jenson
 */

#include <stdlib.h>
#include <stdio.h>
#include "queue.h"

int main(){
    queue q = queue_init(10);
    int i =0;
    for(i=1;i<=10;i++){
        queue_enqueue(q,i);
    }
    for(i=1;i<=10;i++){
        printf("%d\t",queue_get(q));
    }
    free(q);
    return 0;
}

你可能感兴趣的:(算法,职场,休闲)