您的位置:首页 > 其它

队列的实现

2015-08-16 11:28 375 查看
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <ctype.h>
#define element int
#define max__queue 10
typedef 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: