c/c++线性循环队列
线性循环队列
队列是先进先出,和栈相反.
线性循环队列,牺牲一个空间,实现循环。比如空间大小为4,牺牲一个空间,所以最多放3个元素。
假设front指向0位置,tail指向3位置
出队后
front指向1位置,tail位置不变还是3
入队后(4)
front指向不变还是1,tail指向0位置
出队后
front指向2位置,tail位置不变还是0
入队后(5)
front指向不变还是2,tail指向1位置
whilequeue.h
#ifndef __WHILEQUEUE__
#define __WHILEQUEUE__#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <memory.h>
#include <stdbool.h>#define WHILEQUEUE_INIT_SIZE 8typedef int ElemType;typedef struct whilequeue{ElemType* base;int front;int tail;
}whilequeue;void init(whilequeue*);
//入队
void enQueue(whilequeue*, ElemType);
void show_list(whilequeue*);
//出队
void deQueue(whilequeue*);
void clear(whilequeue*);
void destroy(whilequeue*);
#endif
whilequeue.c
#include "whilequeue.h"void init(whilequeue* seq){seq->base = (ElemType*)malloc(sizeof(ElemType) * WHILEQUEUE_INIT_SIZE);seq->front = seq->tail = 0;
}
void enQueue(whilequeue* seq, ElemType x){//判断队列是否已满if((seq->tail + 1) % WHILEQUEUE_INIT_SIZE == seq->front){printf("queue is full\n");return;}seq->base[seq->tail] = x;seq->tail = (seq->tail + 1) % WHILEQUEUE_INIT_SIZE;
}
void show_list(whilequeue* seq){int i = seq->front;while(i != seq->tail){printf("%d\n", seq->base[i++ % WHILEQUEUE_INIT_SIZE]);i = i % WHILEQUEUE_INIT_SIZE;}
}
void deQueue(whilequeue* seq){//判断队列是否为空,空了的话,就不需要移动frontif(seq->front == seq->tail)return;seq->front = (seq->front + 1) % WHILEQUEUE_INIT_SIZE;
}
void clear(whilequeue* seq){}
void destroy(whilequeue* seq){}
whilequeuemain.c
#include "whilequeue.h"int main(){whilequeue list;init(&list);int select = 1;ElemType item;int index;while(select){printf("*****************************************\n");printf("*** [1] push [2] pop ***\n");printf("*** [3] show_list [4] length ***\n");printf("*** [5] clear [6] destroy ***\n");printf("*** [0] quit ***\n");printf("*****************************************\n");printf("请选择:>");scanf("%d", &select);if(0 == select)break;switch(select){case 1:printf("请输入要插入的数据>\n");scanf("%d",&item);enQueue(&list, item);show_list(&list);break;case 2:deQueue(&list);show_list(&list);break;case 3:show_list(&list);break;case 5:clear(&list);show_list(&list);break;case 6:destroy(&list);break;default:printf("输入的选择错误,请重新选择\n");break;}}//destroy(&list);
}
转载于:https://www.cnblogs.com/xiaoshiwang/p/9246421.html
c/c++线性循环队列相关推荐
- 2021 - 9 -下旬 数据结构- 线性表 -双端循环队列 - java实现
//循环双端队列:Circle Double Ended Queue //本质是对动态数组的优化 //队头队尾都可以添加或删除元素 //相比于普通循环队列需要注意的点是在队头插入元素时的对front前 ...
- 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码
//循环队列,本质就是用动态数组实现的,且出队入队时间复杂度均O(1)的队列 //相比普通队列,增设一个front指针,代表队头,代表下一个出队的元素 //循环队列的重点在于队头队尾的元素的下标的计算 ...
- 8 线性表-循环队列-顺序存储
这几天犹豫了一下要不要上机实现数据结构的代码 一轮复习已经结束了 第二次看还是觉得光看书实在太无感了 于是决定来上机 顺便加深印象 即使考不上 记录一些基础的知识 以后找工作也有用-- 好 就这样决定 ...
- 数据结构-线性表之循环队列
文章目录 一:循环队列 二:实现 (1)结构体定义 (2)初始化 (3)入队 (4)出队 (5)返回队头和队尾 三:代码 一:循环队列 实现队列要么使用数组,要么使用链表,但由于数组对于出队和入队这样 ...
- 【Java】 LeetCode 622. 设计循环队列 (有关实现循环队列的讲解)
题目: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一 ...
- C++编程练习(5)----“实现简单的循环队列的顺序存储结构“
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端 ...
- 数据结构之——队列与循环队列
数据结构学习之--队列与循环队列 什么是队列(Queue) 队列基于动态数组的实现及时间复杂度分析 优化队列 循环队列(LoopQueue) 什么是队列(Queue) 队列(Queue)同栈(stac ...
- 4循环队列的顺序表示中,为什么要空一个位置?
我们先讲一下循环队列的概念: 首先是队列的概念,这个大家都很清楚.队列就是一个线性表. 循环队列就是头尾相连的队列. 那么在普通的队列中我们怎么区别队列中有多少个元素的呢? 队列里有两个指针: 一个指 ...
- C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...
目前,处在学习数据结构+ing,由于之前学过了队列,今天就把自己写过的代码做了一些完善分享给大家,希望能够帮助到有需要的朋友,有不足的地方欢迎大家交流 φ(゜▽゜*)♪ 队列是另一种限定性的线性 ...
- 循环队列真的没那么难,就那么几个注意点,附Java代码及运行效果
1. 队列 队列是一种常见的线性数据结构,满足先进先出(First In First Out),简称为FIFO,第一次看到FIFO还以为是单片机的输出输出什么的,见笑了.数据结构不太了解的话可以看看我 ...
最新文章
- Firebug和Yslow是个好工具
- python语言表白源码-表白 - python代码库 - 云代码
- php中将数据加入到文件中
- cdt规约报文用程序解析_用Python运维网络(5):scapy
- [转] jQuery源码分析-如何做jQuery源码分析
- mysql 关联查询_响应时间长?MySQL查询优化教程来了!
- 【JAVA】StringTokenizer 迭代方式对字符串进行分割
- 云+X案例展 | 金融类:青云QingCloud助力泰康人寿云计算演进之路
- @Transactional事务不生效问题解决(springboot)
- 练习题︱streamlit + opencv/YOLOv3 快速构建自己的图像目标检测demo网页
- html在ie中img地址为https,关于IE10以下的img标签问题解决
- POJO类与javaBean类的区别
- 微信企业付款至银行卡 详细Demo 独立封装
- 宝塔防火墙可以防ddos攻击吗
- java catch 空指针异常_java空指针异常怎么处理
- AD domain 环境下VBS自动生成邮件签名
- final关键字能修饰构造方法么?
- DataGrip 导入导出数据库设置
- win10下cuda版本升级
- 【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)
热门文章
- 音视频开发(Anychat如何改善音视频通话过程中的用户体验)
- 算法(三)、[海量] 数据处理
- linux-centos使用 wget命令获取jdk
- 《Python 学习手册4th》 第十六章 函数基础
- php $_SERVER详细参数解析
- 使用脚本开启客户端远程桌面
- 学***必去的网站“***基地”
- 链家网页爬虫_R爬虫小白入门:Rvest爬链家网+分析(一)
- 服务器虚拟机的关键特性,VMware Workstation的几大关键特性
- Nginx源码分析 - 主流程篇 - 平滑重启和信号控制(10)