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
相关文章推荐
- C语言实现动态数组大小
- 算法(第四版)笔记<一>-------动态队列的数组实现(Java语言)
- c语言中实现动态数组!(自己包的,共大家思考)
- C语言使用数组实现简单队列
- 队列的C语言实现(循环数组结构)
- 可存放任意类型变量的动态数组--C语言实现
- 【算法】C语言实现数组的动态分配
- Java数组实现可以动态增长的队列
- 数据结构队列之环形队列的动态数组实现:queue
- 数据结构与算法分析-用C语言实现队列(数组方式)
- C++动态数组实现队列
- 基于数组的队列实现(C语言) - ahljjun的专栏 - 博客频道 - CSDN.NET
- C语言完美实现动态数组代码分享
- 基础知识--数组、栈、队列的静态、动态和链式实现
- c语言中动态数组的实现
- C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列
- C语言实现的可动态增长的队列
- 动态数组实现循环队列
- C语言中动态数组的实现
- 基于动态数组的队列实现