C语言实现使用动态数组实现循环队列
我在上一篇博客《C语言实现使用静态数组实现循环队列》中实现了使用静态数组来模拟队列的操作。
因为数组的大小已经被指定。无法动态的扩展。
所以在这篇博客中,我换成动态数组来实现。
动态数组能够不断开辟内存空间。仅仅是会在数组的初始化时有所不同。其它对数组的操作都是一样的。代码上传至 https://github.com/chenyufeng1991/Queue_DynamicArray 。
(1)声明变量
static int *queue;//声明数组
static int maxSize;//数组大小
static int head;//指向头部
static int tail;//指向尾部
(2)初始化队列
//初始化队列
void InitQueue(int size){ maxSize = size;
queue = (int *)malloc(size * sizeof(int));
head = 0;
tail = 0;
}
(3)进队列
//进队列
void EnQueue(int value){
//先推断是否已满
if ((tail + 1) % maxSize == head) {
printf("队列已满。无法插入\n");
}else{
//未满
queue[tail] = value;
tail = (tail + 1) % maxSize;
}
}
(4)出队列
//出队列
int DeQueue(){ int temp;
//先推断是否为空
if (head == tail) {
printf("队列为空。出列失败\n");
}else{ temp = head;
head = (head + 1) % maxSize;
} return temp;
}
(5)推断队列是否为空
//推断队列是否为空
int IsEmpty(){
if (head == tail) {
printf("队列为空\n");
return 1;
} printf("队列不为空\n");
return 0;
}
(6)推断队列是否已满
//推断队列是否已满
int IsFull(){ if ((tail + 1)% maxSize == head) {
printf("队列已满\n");
return 1;
} printf("队列未满\n");
return 0;
}
(7)打印队列元素
//打印队列元素
void PrintQueue(){
for (int i = head; i < tail; i++) {
printf("%d ",queue[i]);
}
printf("\n");
}
(8)測试代码
int main(int argc, const char * argv[]) {
InitQueue(5);
EnQueue(2);EnQueue(4);EnQueue(8);EnQueue(1);EnQueue(5);
PrintQueue();
DeQueue();DeQueue();DeQueue();
PrintQueue();
IsEmpty();
IsFull();
return 0;
}
C语言实现使用动态数组实现循环队列的更多相关文章
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- C语言基础 - 实现动态数组并增加内存管理
用C语言实现一个动态数组,并对外暴露出对数组的增.删.改.查函数 (可以存储任意类型的元素并实现内存管理) 这里我的编译器就是xcode 分析: 模拟存放 一个 People类 有2个属性 字符串类型 ...
- 用OC基于数组实现循环队列
一.简言 使用数组实现循环队列时,始终会有一个空余的位置预留着,作为一个判决队列已满的条件(当然也可以采用其他方式).在前面已经用C++介绍了基本的算法,可以去回顾一下https://www.cnbl ...
- C语言实现使用动态数组来构造栈结构
我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...
- 纯C语言(C89)实现动态数组
起因 工作很少接触纯C项目,业余写着玩玩,不断雕琢 目标 纯C实现动态数组,提供方便易用泛型接口,避免依赖 实现 完全封装,隐藏结构体细节,不支持栈创建 拷贝存储,轻微性能代价换来易用性 vector ...
- 基于数组的循环队列(C++模板实现)
循环队列使用数组实现的话,简单.方便.之前实现的队列,当尾端索引到达队列最后的时候,无论前面是否还有空间,都不能再添加数据了.循环队列使得队列的存储单元可以循环利用,它需要一个额外的存储单元来判断队列 ...
- Java数组实现循环队列的两种方法
用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...
- 三 基于Java动态数组手写队列
手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...
- 数组模拟循环队列(java实现)
1.front变量的含义:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素front的初始值=0. 2.rear变量的含义:rear指向队列的最后一个元素的后一个位置 ...
随机推荐
- Swift - 可编辑表格样例(可直接编辑单元格中内容、移动删除单元格)
(本文代码已升级至Swift3) 本文演示如何制作一个可以编辑单元格内容的表格(UITableView). 1,效果图 (1)默认状态下,表格不可编辑,当点击单元格的时候会弹出提示框显示选中的内容 ...
- spark rdd median 中位数求解
lookup(key) Return the list of values in the RDD for key key. This operation is done efficiently if ...
- package-org.springframework.ui-interface:Model.class
ylbtech-package-org.springframework.ui-interface:Model.class 1.返回顶部 1. /* * Copyright 2002-2012 the ...
- MySQL架构与SQL执行流程
MySQL架构设计 下面是一张MySQL的架构图: 上方各个组件的含义如下: Connectors 指的是不同语言中与SQL的交互 Management Serveices & Utiliti ...
- 29. Divide Two Integers[M]两数相除
题目 Given two integers dividend and divisor, divide two integers without using multiplication, divisi ...
- 在Mac OSX上安装ffmpeg && ffmpeg命令行将h264封装为mp4
ffmpeg功能强大,可以通过命令行来对音视频进行处理.为了使用其功能,我在Mac上对其进行了安装. 我的Mac OS X 系统版本:OS X Yosemite, 10.10.14 关于ffmpeg在 ...
- 创建一个dynamics CRM workflow (四) - Development of Custom Workflows
首先我们需要确定windows workflow foundation 已经安装. 创建之后先移除MyCustomWorkflows 里面的 Activity.xaml 从packages\Micro ...
- 洛谷P1993 小K的农场_差分约束_dfs跑SPFA
Code: #include<cstdio> #include<queue> using namespace std; const int N=10000+233; const ...
- jq操作table追加td
示例 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- TensorFlow实战学习笔记(14)------VGGNet
一.VGGNet:5段卷积[每段有2~3个卷积层+最大池化层][每段过滤器个数:64-128-256-512-512] 每段的2~3个卷积层串联在一起的作用: 2个3×3的卷积层串联的效果相当于一个5 ...