队列的实现

来源:互联网 发布:数据挖掘工具weka教程 编辑:程序博客网 时间:2024/05/21 06:50
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <malloc.h>#include <ctype.h>#define element int#define max__queue 10typedef struct queue{        element *array;        int capacity;//队列预分配大小        int front;//队头--删除        int rear;//队尾----插入        int size;//当前队列大小} queue, *queue_point;int isempty(const queue_point s)//判断队列是否空闲{        return s->size == 0;}int isfull(const queue_point s)//判断队列是否满{        return s->capacity <= s->size;}void makeempty(queue_point s)//使队列为空{        s->size = 0;        s->capacity = 0;        s->front = -1;        s->rear = -1;}void circle_queue(queue_point s)//队列循环{        s->front = -1;}queue_point create_queue(const int max_queue)//创建一个队列 并返回{        queue_point a = calloc(1, sizeof(queue));        if (a == NULL)        {                printf("calloc error");        }        a->array = (element*)calloc(max_queue, sizeof(element));        if (a->array == NULL)        {                printf("calloc error");        }        makeempty(a);        a->capacity = max_queue;        return a;}void enqueue(element data, queue_point s)//尾部 进队{        if (isfull(s))        {                printf("queue is full");        }        else if (s == NULL)        {                s = create_queue(max__queue);        }        if (s->rear + 1 == s->capacity)        {                s->rear == -1;        }        s->rear++;        s->size += 1;        s->array[s->rear] = data;}element dequeue(queue_point s)//头部 出队{        if (s->front + 1 == s->capacity)        {                s->rear == -1;        }        s->front++;        s->size -= 1;        return s->array[s->front];}void display_queue(const queue_point s)//输出队列的数据{        int b = s->size;        while (b)        {                printf("%d ", s->array[s->rear - s->size + b]);                b--;        }}



#include "20150524.c"int main(){        queue_point duilie = create_queue(10);        srand(time(NULL));        enqueue(rand() % 100 + 1, duilie);        enqueue(rand() % 100 + 1, duilie);        enqueue(rand() % 100 + 1, duilie);        enqueue(rand() % 100 + 1, duilie);        enqueue(rand() % 100 + 1, duilie);        //printf("%d\n", duilie->rear);        display_queue(duilie);        dequeue(duilie);        display_queue(duilie);        return 0;}


0 0
原创粉丝点击