一.静态数组实现

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语言描述队列的实现及操作(数组实现)的更多相关文章

  1. C语言描述队列的实现及操作(链表实现)

    // 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include<stdio.h> #incl ...

  2. C语言描述二叉树的实现及操作(链表实现)

    概述     二叉树为每个节点最多有两个儿子节点(左儿子节点和右儿子节点)的树. 前序遍历:根结点 ---> 左子树 ---> 右子树. 中序遍历:左子树---> 根结点 ---&g ...

  3. C语言描述链表的实现及操作

    一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> ...

  4. C语言描述栈的实现及操作(数组实现)

    一.静态数组实现 1.堆栈接口 // 一个堆栈模块接口 // 命名为stack.h #define STACK_YTPE int // 堆栈所存储值的类型 // push函数 // 把一个新值压入栈中 ...

  5. C语言描述栈的实现及操作(链表实现)

    #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int Elementtype; / ...

  6. 【数据结构】之队列(C语言描述)

    队列(Queue)是编程中最常用的数据结构之一. 队列的特点是“先进先出”,就像食堂排队买饭一样,先来的人排在前面,后来的人排在后面:前面的人先买饭,买完饭后离开这个队列.这就是队列的原理,它可以进行 ...

  7. 数据结构(java语言描述)

    概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...

  8. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  9. 数据结构与抽象 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. ...

随机推荐

  1. 20145307陈俊达《网络对抗》Exp9 Web安全基础实践

    20145307陈俊达<网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求 ...

  2. 20145335郝昊《网络攻防》Exp4 Adobe阅读器漏洞攻击

    20145335郝昊<网络攻防>Exp4 Adobe阅读器漏洞攻击 实验内容 初步掌握平台matesploit的使用 有了初步完成渗透操作的思路 本次攻击对象为:windows xp sp ...

  3. Android 实践项目开发一

    这次做的项目是—手机地图系统 本次实验的功能是,为用户提供需要的目标定位系统定位处理,即用户设置一个目标后, 可以在后台启动一个Service,能够定时读取GPS数据已获得用户当前所在的位置信息, 并 ...

  4. POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解

    题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...

  5. BZOJ 3555: [Ctsc2014]企鹅QQ

    似乎大家全部都用的是hash?那我讲一个不用hash的做法吧. 首先考虑只有一位不同的是哪一位,那么这一位前面的位上的字符一定是全部相同,后面的字符也是全部相同.首先考虑后面的字符. 我们对n个串的反 ...

  6. BZOJ5188: [Usaco2018 Jan]MooTube 并查集+离线处理

    BZOJ又不给题面... Luogu的翻译看不下去... 题意简述 有一个$n$个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你$Q$个询问,问你与点$v$的距离超过$k ...

  7. UVa 11729 突击战

    https://vjudge.net/problem/UVA-11729 题意:有n个部下,每个部下需要完成一项任务.第i个部下需要你话B分钟交代任务,然后立刻执行J分钟完成任务.安排交代任务顺序并计 ...

  8. yii2 高级版新建一个应用(api应用为例子)

    先在项目的根目录下复制一份 backend 为 api: cp backend/ api -r 拷贝 api 环境 cp -a environments/dev/frontend environmen ...

  9. Linux——shell简单学习(一)

    首先来一个小程序,来查看所在目录,以及该目录下的文件 #!/bin/sh # “#!”指定用sh执行shell脚本 #this is to show workstation # “#” 表示注释 ec ...

  10. quality center 支持的平台