码迷,mamicode.com
首页 > 编程语言 > 详细

C语言学习之队列操作

时间:2015-02-09 09:27:25      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:c语言   队列   接口   

本文件为队列操作的接口:


/*queue.h*/

#ifndef _SEQQUEUE_H_
#define _SEQQUEUE_H_

#define QUEUE_MAX    15

typedef struct
{
    int number;   //顾客编号
    long time;//进入时间
}DATATYPE_T;

typedef struct
{
    DATATYPE_T  data[QUEUE_MAX];  //队列数组
    int head;                     //队列头
    int tail;                     //队列尾
}SEQQUEUE;

/*队列是否为空*/
int queue_empty(SEQQUEUE *queue);

/*队列是否满*/
int queue_full(SEQQUEUE *queue);

/*队列初始化*/
SEQQUEUE *queue_init();

/*进队列*/
int queue_push(SEQQUEUE *queue,DATATYPE_T  data);

/*出队列*/
DATATYPE_T *queue_pop(SEQQUEUE *queue);

/* 获取队列的第一个元素*/
DATATYPE_T *get_queue_first_element(SEQQUEUE *queue);

/*获取队列的长度*/
int get_queue_length(SEQQUEUE *queue);

/*释放队列*/
void queue_free(SEQQUEUE *queue);

/*显示队列信息*/
int show_queue_info(SEQQUEUE *queue);
#endif



/*queue.c*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "seqQueue.h"


/*队列是否为空*/
int queue_empty(SEQQUEUE *queue)
{
    return (queue->head==queue->tail);
}

/*队列是否满*/
int queue_full(SEQQUEUE *queue)
{
    return (queue->tail==QUEUE_MAX);
}

/*队列初始化*/
SEQQUEUE *queue_init()
{
    SEQQUEUE *queue=NULL;
    queue = malloc(sizeof(SEQQUEUE));
    if(queue == NULL)
    {
        printf("malloc failed\n");
        return NULL;
    }
    queue->head = 0;
    queue->tail = 0;
    return queue;
}

/*进队列*/
int queue_push(SEQQUEUE *queue,DATATYPE_T  data)
{
    int ret = 0;
    ret = queue_full(queue);
    if(ret!=0)
    {
        printf("the queue is full\n");
        return -1;
    }
    queue->tail++;
    queue->data[queue->tail] = data;
    return 0;
}

/*出队列*/
DATATYPE_T *queue_pop(SEQQUEUE *queue)
{
    int ret = 0;
    ret = queue_empty(queue);
    if(ret!=0)
    {
        printf("the queue is empty\n");
        return NULL;
    }
    queue->head++;
    return &(queue->data[queue->head]);
}

/* 获取队列的第一个元素*/
DATATYPE_T *get_queue_first_element(SEQQUEUE *queue)
{
    int ret = 0;
    ret = queue_empty(queue);
    if(ret!=0)
    {
        printf("the queue is empty\n");
        return NULL;
    }
    return &(queue->data[queue->head]);
}

/*获取队列的长度*/
int get_queue_length(SEQQUEUE *queue)
{
    return ((queue->tail)-(queue->head));
}

/*释放队列*/
void queue_free(SEQQUEUE *queue)
{
    if(queue!=NULL)
    {
        free(queue);
        queue = NULL;
    }
}

/*显示队列全部信息 */
int show_queue_info(SEQQUEUE *queue)
{
    int i = 0;
    for(i=queue->head+1;i<(queue->tail+1);i++)
    {
        printf("num:%d,time:%d\n",queue->data[i].number,queue->data[i].time);
    }
    return 0;
}



/*queue.c*/






C语言学习之队列操作

标签:c语言   队列   接口   

原文地址:http://blog.csdn.net/qlx846852708/article/details/43666927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!