C语言描述队列的实现及操作(数组实现)
一.静态数组实现
1.队列接口
#include<stdio.h> // 一个队列模块接口
// 命名为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<stdio.h>
#include<assert.h>
#include"myqueue.h" const int QUEUE_SIZE=; //队列中元素个数最大限制
static QUEUE_TYPE queue[QUEUE_SIZE+]; //存储队列中值的数组
static int front = ; //指向队列首元素的指针
static int rear = ; //指向队列尾元素的指针 void enqueue(QUEUE_TYPE value) {
// 判断队列是否为满
assert(!is_full());
// 判断队列是否为空
if (is_empty())
queue[front] = value;
queue[rear] = value;
rear = (rear + ) % (QUEUE_SIZE + ); } QUEUE_TYPE dequeue(void) {
//判断队列是否为空
assert(!is_empty()); int temp = queue[front];
front = (front + ) % (QUEUE_SIZE + );
return temp;
} bool is_empty(void) {
//如果rear==front则队列为空
return rear == front;
} bool is_full(void) {
//如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满
return (rear + ) % (QUEUE_SIZE + ) == front;
} QUEUE_TYPE front_value(void) {
return queue[front];
} int get_size(void) {
return (rear-front);
}
二.动态数组实现
1.队列接口
#include<stdio.h>
// 在原有基础上增加了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<stdio.h>
#include<assert.h>
#include<malloc.h> static QUEUE_TYPE *queue; //定义队列指针
static size_t queue_size; //记录队列大小
static int front = ;
static int rear = ; void creat_queue(size_t size) {
assert(queue_size == );
queue_size = size;
queue =(QUEUE_TYPE*) malloc((queue_size+)*sizeof(QUEUE_TYPE));
assert(queue != NULL);
} void destroy_queue(void) {
assert(queue_size > );
queue_size = ;
free(queue);
queue = NULL;
} void enqueue(QUEUE_TYPE value) {
// 判断队列是否为满
assert(!is_full());
// 判断队列是否为空
if (is_empty())
queue[front] = value;
queue[rear] = value;
rear = (rear + ) % (queue_size + );
} QUEUE_TYPE dequeue(void) {
//判断队列是否为空
assert(!is_empty()); int temp = queue[front];
front = (front + ) % (queue_size + );
return temp;
} bool is_empty(void) {
//如果rear==front则队列为空
return rear == front;
} bool is_full(void) {
//如果(rear+1)%(QUEUE_SIZE+1)==front则队列为满
return (rear + ) % (queue_size + ) == front;
} QUEUE_TYPE front_value(void) {
return queue[front];
} int get_size(void) {
return (rear - front);
}
C语言描述队列的实现及操作(数组实现)的更多相关文章
- C语言描述队列的实现及操作(链表实现)
// 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...
- C语言描述二叉树的实现及操作(链表实现)
概述 二叉树为每个节点最多有两个儿子节点(左儿子节点和右儿子节点)的树. 前序遍历:根结点 ---> 左子树 ---> 右子树. 中序遍历:左子树---> 根结点 ---&g ...
- C语言描述链表的实现及操作
一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> ...
- C语言描述栈的实现及操作(数组实现)
一.静态数组实现 1.堆栈接口 // 一个堆栈模块接口 // 命名为stack.h #define STACK_YTPE int // 堆栈所存储值的类型 // push函数 // 把一个新值压入栈中 ...
- C语言描述栈的实现及操作(链表实现)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int Elementtype; / ...
- 【数据结构】之队列(C语言描述)
队列(Queue)是编程中最常用的数据结构之一. 队列的特点是“先进先出”,就像食堂排队买饭一样,先来的人排在前面,后来的人排在后面:前面的人先买饭,买完饭后离开这个队列.这就是队列的原理,它可以进行 ...
- 数据结构(java语言描述)
概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)
数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...
随机推荐
- Salty Fish 结对学习心得体会及创意照 (20165211 20165208)
小组结对学习心得体会及创意照 在阅读了软件工程讲义 3 两人合作(2) 要会做汉堡包和现代软件工程讲义 3 结对编程和两人合作后,加之对于这几周组队学习的感悟,我们对于组队学习的一些感悟和想法如下: ...
- 思考卷积神经网络(CNN)中各种意义
原文:https://blog.csdn.net/aimreant/article/details/53145063 思考卷积神经网络(CNN)中各种意义 只是知道CNN是不够,我们需要对其进行解剖, ...
- VC 系统托盘编程,含有气泡提示
转载一:http://blog.sina.com.cn/s/blog_6acf36ee0100rxdb.html 转载二:http://blog.csdn.net/akof1314/article/d ...
- Timer,TimerTask,Handler
新建一个定时器线程,通过此线程每一秒发送数据到Handler,然后通过Handler来修改UI. 1.获得Handler,Timer,TimerTask对象. Handler handler=new ...
- 大数字运算, BigInteger
package com.ykmimi.test1; import java.math.BigInteger; /** * 大数字运算 * @author ukyor * */ public class ...
- Educational Codeforces Round 53 Editorial
After I read the solution to the problem, I found that my solution was simply unsightly. Solved 4 ou ...
- BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...
- ASP.NET MVC 中使用Ckeditor4.5 编辑器
一.在项目中添加Ckeditor4.5.11 (1) 新建 ASP.NET MVC5项目,解压缩ckeditor_4.5.11_standard.zip,在VS2015的解决方案资源管理器中将得到的“ ...
- C#修饰符说明
方法不加访问修饰符默认的是 private 类不加访问修饰答默认的是 internal //////////////////////////////////////////////////////// ...
- Windows上玩转TensorFlow(一)
Windows上TensorFlow的安装和环境搭建: 1.安装Python 3.5.2 2.通过Pip3安装TensorFlow CPU版 https://www.tensorflow.org/in ...