基于数组的队列实现
来源:互联网 发布:editplus怎么运行java 编辑:程序博客网 时间:2024/06/08 10:25
首先建立头文件“qa.h”
/* 基于数组的队列实现*/#ifndef _QA_H#define _QA_H#include <sys/types.h>/* 队列 */typedef struct Queue {int* arr; /* 数组 */size_t cap; /* 容量 */size_t front; /* 前端(弹出) */size_t rear; /* 后端(压入) */size_t size; /* 数量 */}QUEUE;/* 分配内存空间并初始化为空队列 */void queue_init (QUEUE* queue, size_t cap);/* 释放内存空间并恢复到初始状态 */void queue_deinit (QUEUE* queue);/* 判断是否满 */int queue_full (QUEUE* queue);/* 判断是否空 */int queue_empty (QUEUE* queue);/* 压入 */void queue_push (QUEUE* queue, int data);/* 弹出 */int queue_pop (QUEUE* queue);/* 队首 */int queue_front (QUEUE* queue);/* 数量 */size_t queue_size (QUEUE* queue);#endif /* _QA_H */
函数实现部分“qa.c”
/* 基于数组的队列 */#include <stdlib.h>#include "qa.h"/* 分配内存空间并初始化为空队列 */void queue_init (QUEUE* queue, size_t cap) {queue->arr = malloc (cap * sizeof (int));queue->cap = cap;queue->front = 0;queue->rear = 0;queue->size = 0;}/* 释放内存空间并恢复到初始状态 */void queue_deinit (QUEUE* queue) {free (queue->arr);queue->arr = NULL;queue->cap = 0;queue->front = 0;queue->rear = 0;queue->size = 0;}/* 判断是否满 */int queue_full (QUEUE* queue) {return queue->size >= queue->cap;}/* 判断是否空 */int queue_empty (QUEUE* queue) {return ! queue->size;}/* 压入 */void queue_push (QUEUE* queue, int data) {if (queue->rear >= queue->cap)queue->rear = 0;++queue->size;queue->arr[queue->rear++] = data;}/* 弹出 */int queue_pop (QUEUE* queue) {if (queue->front >= queue->cap)queue->front = 0;--queue->size;return queue->arr[queue->front++];}/* 队首 */int queue_front (QUEUE* queue) {if (queue->front >= queue->cap)queue->front = 0;return queue->arr[queue->front];}/* 数量 */size_t queue_size (QUEUE* queue) {return queue->size;}
测试用例“qa_test.c”
/* 基于数组的队列 */#include <stdio.h>#include "qa.h"/* 测试用例 */int main (void) {QUEUE queue;queue_init (&queue, 4);int i;for (i = 10; i <= 40; i += 10)if (! queue_full (&queue))queue_push (&queue, i);for (i = 0; i < 2; ++i)if (! queue_empty (&queue))printf ("%d\n", queue_pop (&queue));for (i = 50; i <= 60; i += 10)if (! queue_full (&queue))queue_push (&queue, i);while (! queue_empty (&queue))printf ("%d\n", queue_pop (&queue));queue_deinit (&queue);return 0;}
0 0
- 基于数组的队列实现
- 基于数组的队列实现
- 基于数组的队列实现(C语言)
- java 基于数组实现的队列
- 简单队列的实现(基于数组)
- 基于动态数组的队列实现
- 基于数组和节点方式的队列的实现
- 笔记七:基于数组的循环队列的实现
- 基于数组和链表的队列实现
- 基于数组的循环队列(C++模板实现)
- 数据结构之——基于数组实现的循环队列
- 基于数组的循环队列
- 基于数组的循环队列
- 基于数组的优先级队列
- 基于数组的队列Queue
- 基于数组的队列操作
- 队列的数组实现
- 队列的数组实现
- Android 的Margin和Padding属性
- android学习笔记(1)---环境搭建
- 编程问题的O(1)通解
- 我这个冒泡法哪里出错了,编译没错,链接就出错了
- android客户端通过xfire访问webservice
- 基于数组的队列实现
- Android开发之UI的开源组件
- 扩展RBAC用户角色权限设计方案
- android学习笔记(2)---first demo
- CocoStudio学习笔记(1)——UI编辑器初识和导出项目加入VS中
- sql执行顺序
- HDU 4611 Balls Rearrangement 数学 循环节优化
- 再谈二叉树的层次(宽度)遍历
- zlib-FAQ