一.静态数组实现

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. 20145317彭垚 MSF基础应用

    20145317彭垚 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,将真正要负责攻击的代码传送到靶机中,我觉得老师上课 ...

  2. js 注意点

    1.var // 反例 myname = "global"; // 全局变量 function func() { alert(myname); // "undefined ...

  3. 第几天|2018年蓝桥杯B组题解析第一题-fishers

    标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 思路:计算日期,用excel计算两个日期的差 ...

  4. 基础dp 记录

    51nod 1134 最长递增子序列 #include<iostream> #include<cstdio> #include<cstring> #include& ...

  5. 2018 leetcode

    2018-8-6 Lowest Common Ancestor of a Binary Tree(二叉树) Merge Intervals(排序) 2018-8-7 Maximal Square (动 ...

  6. gulp报错插件gulp-notify 配置项

    var notify = require("gulp-notify"); module.exports = function(){ var args = Array.prototy ...

  7. 《算法竞赛入门经典》习题及反思 -<2>

    数组 Master-Mind Hints,Uva 340 题目:给定答案序列和用户猜的序列,统计有多少数字对应正确(A),有多少数字在两个序列都出现过但位置不对. 输入包括多组数据.每组输入第一行为序 ...

  8. HDU 6071 Lazy Running(很牛逼的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回 ...

  9. Linux——系统引导流程学习简单笔记

    开启电源: 固件 firmware(CMOS/BIOS) → POST 加电自检 对硬件就行检查 ↓ 自举程序 BootLoader(GRUB) → 载入内核 ↓ 载入内核 Kernel 1:驱动硬件 ...

  10. 数组类型的退化Decay

    Decay即数组在某些情况下将退化为指针. 测试代码: #include <iostream> #include <typeinfo> template <typenam ...