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. ...
随机推荐
- 2018-2019-1 20189218《Linux内核原理与分析》第六周作业
向menuOS中增加命令 修改menu目录下的test.c文件,增加自己的函数定义,并在修改main()函数,按照前面的menuconfig的写法写好自己的menuconfig. 我选择的是acces ...
- Python3基础 file open 打开txt文件并打印出全文
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- TeeChart缩放
//缩放的技巧 //首先找到待缩放的区域,例如横轴x1-x2,纵轴y1-y2 //那么待放到的区域就是x=x1;x=x2;y=y1;y=y2;这四条线组成的矩形 //首先确定矩形的左上角的坐标,然后确 ...
- [不屈的复习] - 编辑工具IDE选取与Hello World
大家真正在工作中开发 java 应用都会使用eclipse,myeclipse, IntelliJ IDEA等等 现在还有vscode也支持了java扩展 在控制台下运行第一个Java程序,可以看到输 ...
- Unity3D学习笔记(二):个体层次、绝对和局部坐标、V3平移旋转
Directional Light:平行光源/方向性光源,用来模拟太阳光(角度只与旋转角度有关,与位置无关) Point Light:点光源,用来模拟灯泡,向四周发散光源 Spotlight:锥光源/ ...
- 【Coursera】Sixth Week(2)
DNS:Domain Name System The Domain Name System convert user-friendly names,like www.umich.edu, to net ...
- LA 3135 阿格斯(优先队列)
https://vjudge.net/problem/UVALive-3135 题意: 你的任务是编写一个称为Argus的系统.该系统支持一个Register的命令 Register Q_num Pe ...
- 通过设置代理,解决服务器禁止抓取,报“java.io.IOException: Server returned HTTP response code: 403 for URL”错误的方法
java.io.IOException: Server returned HTTP response code: 403 for URL: http:// 这个是什么异常呢? 当你使用java程序检索 ...
- Could not find a package configuration file provided by "ecl_build",.................couldn't find required component 'ecl_build'
sudo apt-get install ros-kinetic-ecl-build
- awk 提取数字
echo b1c2d3d1e8f9 | awk ' { string=$0 len=length(string) for(i=0; i<=len; i++) { tmp=substr(strin ...