您的位置:首页 > 编程语言 > C语言/C++

C语言队列动态数组实现

2011-10-08 14:25 603 查看
/*
* Queue.h
*
*  Created on: 2011-10-7
*      Author: Admin
*/

#ifndef QUEUE_H_
#define QUEUE_H_
#include <stdio.h>
#include <stdlib.h>

/* the data type that contained in the queue */
typedef int QueueData;

typedef struct _queue{

size_t length;      /* queue length */
size_t capacity;    /* queue capacity */
size_t index;       /* get data index */
size_t push_index;  /* insert index */
QueueData *data;    /* the data that queue contain */
}Queue, *pQueue;

/* initialize queue */
void queue_init(pQueue* ptr, size_t size);

/* free memory which the queue own*/
void queue_destroy(pQueue* ptr);

/* add data to queue */
int queue_push(pQueue ptr, QueueData val);

/* dequeue */
QueueData queue_pop(pQueue ptr);

/* get data at front of the queue */
QueueData queue_top(pQueue ptr);

/* return the size of queue */
size_t queue_size(pQueue ptr);

#endif /* QUEUE_H_ */

/*
* Queue.c
*
*  Created on: 2011-10-7
*      Author: Admin
*/
#include <stdio.h>
#include <stdlib.h>
#include "Queue.h"

/* initialize queue */
void queue_init(pQueue* ptr, size_t size){

*ptr = (pQueue)malloc(sizeof(Queue));
if ((*ptr) == NULL){
exit(1);
}
(*ptr)->capacity = size;
(*ptr)->length = 0;
(*ptr)->index = 0;
(*ptr)->push_index = 0;
(*ptr)->data = (QueueData*)malloc(sizeof(QueueData) * size);

if ((*ptr)->data == NULL){
exit(1);
}
}

/* free memory which the queue own*/
void queue_destroy(pQueue* ptr){
free((*ptr)->data);
(*ptr)->data = NULL;
free((*ptr));
(*ptr) = NULL;
}

/* add data to queue */
int queue_push(pQueue ptr, QueueData val){
if (ptr->length >= ptr->capacity){
return 0;
}
ptr->push_index = (ptr->push_index % ptr->capacity) + 1;
ptr->data[ptr->push_index - 1] = val;
ptr->length += 1;
return 1;
}

/* dequeue */
QueueData queue_pop(pQueue ptr){
if (ptr->length <= 0 ){
exit(1);
}
ptr->length -= 1;
ptr->index = ((ptr->index) % ptr->capacity) + 1;
return ptr->data[ptr->index - 1];

}

/* get data at front of the queue */
QueueData queue_top(pQueue ptr){

return ptr->data[ptr->index];

}

/* return the size of queue */
size_t queue_size(pQueue ptr){

return ptr->length;
}


本文出自 “孤鸿灬的博客” 博客,请务必保留此出处http://qinyanhong.blog.51cto.com/1654505/682547
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: