博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言描述队列的实现及操作(数组实现)
阅读量:5030 次
发布时间:2019-06-12

本文共 3124 字,大约阅读时间需要 10 分钟。

一.静态数组实现

1.队列接口

  

#include
// 一个队列模块接口// 命名为myqueue.h#define QUEUE_TYPE int // 定义队列类型为int// enqueue函数// 把一个新值插入队列末尾void enqueue(QUEUE_TYPE value);// dequeue函数// 删除队列首元素并返回QUEUE_TYPE dequeue(void );// is_empty函数// 判断队列是否为空bool is_empty(void);// is_full函数// 判断队列是否已经满bool is_full(void);// front函数// 返回队列第一个值QUEUE_TYPE front_value(void);// get_size函数// 获取队列元素个数int get_size(void);

 

2.静态数组队列

#include
#include
#include"myqueue.h"const int QUEUE_SIZE=100; //队列中元素个数最大限制static QUEUE_TYPE queue[QUEUE_SIZE+1]; //存储队列中值的数组static int front = 0; //指向队列首元素的指针static int rear = 0; //指向队列尾元素的指针void enqueue(QUEUE_TYPE value) { // 判断队列是否为满 assert(!is_full()); // 判断队列是否为空 if (is_empty()) queue[front] = value; queue[rear] = value; rear = (rear + 1) % (QUEUE_SIZE + 1);}QUEUE_TYPE dequeue(void) { //判断队列是否为空 assert(!is_empty()); int temp = queue[front]; front = (front + 1) % (QUEUE_SIZE + 1); return temp;}bool is_empty(void) { //如果rear==front则队列为空 return rear == front;}bool is_full(void) { //如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满 return (rear + 1) % (QUEUE_SIZE + 1) == front;}QUEUE_TYPE front_value(void) { return queue[front];}int get_size(void) { return (rear-front);}

 

二.动态数组实现

1.队列接口

#include
// 在原有基础上增加了creat_queue和destroy_queue函数#define QUEUE_TYPE int // 定义队列类型为int// creat_queue函数// 创建一个队列void creat_queue(size_t size);// destroy_queue函数// 销毁队列void destroy_queue(void);// enqueue函数// 把一个新值插入队列末尾void enqueue(QUEUE_TYPE value);// dequeue函数// 删除队列首元素并返回QUEUE_TYPE dequeue(void );// is_empty函数// 判断队列是否为空bool is_empty(void);// is_full函数// 判断队列是否已经满bool is_full(void);// front函数// 返回队列第一个值QUEUE_TYPE front_value(void);// get_size函数// 获取队列元素个数int get_size(void);

 

2.动态数组队列

#include
#include
#include
static QUEUE_TYPE *queue; //定义队列指针static size_t queue_size; //记录队列大小static int front = 0;static int rear = 0;void creat_queue(size_t size) { assert(queue_size == 0); queue_size = size; queue =(QUEUE_TYPE*) malloc((queue_size+1)*sizeof(QUEUE_TYPE)); assert(queue != NULL); }void destroy_queue(void) { assert(queue_size > 0); queue_size = 0; free(queue); queue = NULL;}void enqueue(QUEUE_TYPE value) { // 判断队列是否为满 assert(!is_full()); // 判断队列是否为空 if (is_empty()) queue[front] = value; queue[rear] = value; rear = (rear + 1) % (queue_size + 1);}QUEUE_TYPE dequeue(void) { //判断队列是否为空 assert(!is_empty()); int temp = queue[front]; front = (front + 1) % (queue_size + 1); return temp;}bool is_empty(void) { //如果rear==front则队列为空 return rear == front;}bool is_full(void) { //如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满 return (rear + 1) % (queue_size + 1) == front;}QUEUE_TYPE front_value(void) { return queue[front];}int get_size(void) { return (rear - front);}

 

转载于:https://www.cnblogs.com/maluning/p/8964052.html

你可能感兴趣的文章
数据分析 -- 白话一下什么是决策树模型(转载)
查看>>
Java SPI机制原理和使用场景
查看>>
web前端java script学习2017.7.18
查看>>
删除TXPlatform
查看>>
LaTex:图片排版
查看>>
并发访问超时的问题可能性(引用)
查看>>
中小团队基于Docker的Devops实践
查看>>
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机...
查看>>
Java 虚拟机部分面试题
查看>>
JS中 String/JSON 方法总结
查看>>
二叉树的遍历问题总结
查看>>
3.14-3.20周总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>