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指向队列的最后一个元素的后一个位置 ...
随机推荐
- sublime界面主题
一直以来都是使用的SUBLIME,真的很强大. 最近刚转到linux来学习C,把它重新配置了一遍,默认的字体颜色的搭配已经很不错了.不过界面的样子还是不太习惯.重新安装了下soda这个主题包,惭愧!即 ...
- 表格td内容过多时,td显示省略号,鼠标移入显示全部内容。
转自:https://blog.csdn.net/weixin_42193908/article/details/80405014 两种方式显示: 1.title方式显示: <!DOCTYPE ...
- WEEX学习网站
https://github.com/alibaba/weex https://alibaba.github.io/weex/ 官网 http://weex.help/topic/57792 ...
- js重定向
在现行的网站应用中URL重定向的应用有很多: 404页面处理.网址改变(t.sina转到weibo.com).多个网站地址(如:http://www.google.com/ .www.g.cn )等: ...
- Orcal的JDBC数据连接方式
package cn.com.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...
- Super超级ERP系统---(7)货位管理
货位是ERP系统总的仓库管理中必不可少的,仓库是有货架组成,货架上的每个格子就是一个货位,所有货位上的商品的库存总和就是仓库商品的库存.仓库的货位主要分为货架和托盘,货架就是仓库的固定货位,托盘就是移 ...
- V4L2框架之视频监控
[参考]韦东山 教学视频 一. V4L2框架: video for linux version 2 虚拟视频驱动vivi.c分析:1.分配video_device2.设置3.注册:video_regi ...
- background-attachment css3属性
<style type="text/css"> body{ margin: 0; } .zhan{ width: 100%; height: 500px; backgr ...
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍
http://www.cnblogs.com/wuhuacong/p/3344096.html 在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章 ...
- 给html里面的class添加一个判断语句,判断当前class是否显示(vue)
当我们想判断这个class是否出现时,其实有很多方法, 我这个是做了一个选项卡,当点击的时候navTitle的值和循环的item的值相同时class就等于borderbottom, 这样我们点击的图层 ...