线性队列操作

来源:互联网 发布:线性表c语言实现 编辑:程序博客网 时间:2024/05/18 00:57

本文主要介绍线性队列的一些操作,费话不多说, 直接上代码。

/**    线 性队列操作*/#include <stdio.h>typedef struct _QUEUE {    int *data;    int head;    int tail;    int count;    int lengh;} queue_t;/*初始化队列*/queue_t * init_queue(unsigned int index){    queue_t *queue = NULL;    if (index == 0)        return ;    queue = (queue_t *)malloc (sizeof(queue_t));    if (NULL == queue) {        queue = (queue_t *)malloc (sizeof(queue_t));        if (NULL == queue) {            return NULL;        }    }    memset(queue, 0, sizeof (queue_t));        queue->data = (int *)malloc(sizeof(int) * index);    if (queue->data == NULL) {        queue->data = (int *)malloc(sizeof(int) * index);        if (NULL == queue->data) {            free(queue);            return NULL;        }    }    memset(queue->data, 0, sizeof(int) * index);    queue->head = 0;    queue->tail = 0;    queue->count = 0;    queue->lengh = index;    return  queue;}/*删除队列*/void destroy_queue(queue_t *queue){    if (queue == NULL)        return ;   free(queue->data);   queue->data = NULL;   free(queue);   queue = NULL;   return;}/*入队操作*/int push_data_to_queue(queue_t *queue, int data){    if (queue == NULL)        return 1 ;    if (!is_queue_full(queue))        return 1;    queue->data[queue->tail] = data;    queue->tail = (queue->tail + 1) % queue->lengh;    queue->count++;    return 0;}/*出队操作*/int poll_data_from_queue(queue_t *queue, int *data){        if (queue == NULL)             return 1 ;        if(!is_queue_empty(queue))            return 1;        *data = queue->data[queue->head];        queue->data[queue->head] = 0;        queue->head = (queue->head + 1) % queue->lengh;        queue->count--;        return 0;}/*判断队列是否为空*/int is_queue_empty(queue_t *queue){    if (queue == NULL){        return 1;    }    if (queue->count == 0)        return 0;    else        return 1;}/*判断队列是否已满*/int is_queue_full(queue_t *queue){    if (queue == NULL){        return 1;    }    if (queue->count == queue->lengh)        return 0;    else         return 1;}/*打印队列成员*/void print_queue_data(queue_t *queue){    int i;       for (i=0; i < (queue->count); i++)        printf ("%d\n", queue->data[i]);    return ;}/*测试用例*/int main(int argc, char *argv[]){    int i;    int index;    queue_t *queue;    queue = init_queue(10);    for (i =0; i < 10; i++){        if (push_data_to_queue(queue,i))            printf("push data %d error\n", i);    }    print_queue_data(queue);    for (i=0; i < 10; i++){        if(poll_data_from_queue(queue,&index))            printf("poll data %d error\n", i);        printf ("the index is %d\n", index);    }    destroy_queue(queue);        return 0;}


 

 

原创粉丝点击