线性循环队列

队列是先进先出,和栈相反.

线性循环队列,牺牲一个空间,实现循环。比如空间大小为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++线性循环队列相关推荐

  1. 2021 - 9 -下旬 数据结构- 线性表 -双端循环队列 - java实现

    //循环双端队列:Circle Double Ended Queue //本质是对动态数组的优化 //队头队尾都可以添加或删除元素 //相比于普通循环队列需要注意的点是在队头插入元素时的对front前 ...

  2. 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码

    //循环队列,本质就是用动态数组实现的,且出队入队时间复杂度均O(1)的队列 //相比普通队列,增设一个front指针,代表队头,代表下一个出队的元素 //循环队列的重点在于队头队尾的元素的下标的计算 ...

  3. 8 线性表-循环队列-顺序存储

    这几天犹豫了一下要不要上机实现数据结构的代码 一轮复习已经结束了 第二次看还是觉得光看书实在太无感了 于是决定来上机 顺便加深印象 即使考不上 记录一些基础的知识 以后找工作也有用-- 好 就这样决定 ...

  4. 数据结构-线性表之循环队列

    文章目录 一:循环队列 二:实现 (1)结构体定义 (2)初始化 (3)入队 (4)出队 (5)返回队头和队尾 三:代码 一:循环队列 实现队列要么使用数组,要么使用链表,但由于数组对于出队和入队这样 ...

  5. 【Java】 LeetCode 622. 设计循环队列 (有关实现循环队列的讲解)

    题目: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一 ...

  6. C++编程练习(5)----“实现简单的循环队列的顺序存储结构“

    队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出(First In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端 ...

  7. 数据结构之——队列与循环队列

    数据结构学习之--队列与循环队列 什么是队列(Queue) 队列基于动态数组的实现及时间复杂度分析 优化队列 循环队列(LoopQueue) 什么是队列(Queue) 队列(Queue)同栈(stac ...

  8. 4循环队列的顺序表示中,为什么要空一个位置?

    我们先讲一下循环队列的概念: 首先是队列的概念,这个大家都很清楚.队列就是一个线性表. 循环队列就是头尾相连的队列. 那么在普通的队列中我们怎么区别队列中有多少个元素的呢? 队列里有两个指针: 一个指 ...

  9. C语言查看队头元素,C语言实现循环队列的初始化进队出队读取队头元素判空-1...

    目前,处在学习数据结构+ing,由于之前学过了队列,今天就把自己写过的代码做了一些完善分享给大家,希望能够帮助到有需要的朋友,有不足的地方欢迎大家交流    φ(゜▽゜*)♪ 队列是另一种限定性的线性 ...

  10. 循环队列真的没那么难,就那么几个注意点,附Java代码及运行效果

    1. 队列 队列是一种常见的线性数据结构,满足先进先出(First In First Out),简称为FIFO,第一次看到FIFO还以为是单片机的输出输出什么的,见笑了.数据结构不太了解的话可以看看我 ...

最新文章

  1. Firebug和Yslow是个好工具
  2. python语言表白源码-表白 - python代码库 - 云代码
  3. php中将数据加入到文件中
  4. cdt规约报文用程序解析_用Python运维网络(5):scapy
  5. [转] jQuery源码分析-如何做jQuery源码分析
  6. mysql 关联查询_响应时间长?MySQL查询优化教程来了!
  7. 【JAVA】StringTokenizer 迭代方式对字符串进行分割
  8. 云+X案例展 | 金融类:青云QingCloud助力泰康人寿云计算演进之路
  9. @Transactional事务不生效问题解决(springboot)
  10. 练习题︱streamlit + opencv/YOLOv3 快速构建自己的图像目标检测demo网页
  11. html在ie中img地址为https,关于IE10以下的img标签问题解决
  12. POJO类与javaBean类的区别
  13. 微信企业付款至银行卡 详细Demo 独立封装
  14. 宝塔防火墙可以防ddos攻击吗
  15. java catch 空指针异常_java空指针异常怎么处理
  16. AD domain 环境下VBS自动生成邮件签名
  17. final关键字能修饰构造方法么?
  18. DataGrip 导入导出数据库设置
  19. win10下cuda版本升级
  20. 【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)

热门文章

  1. 音视频开发(Anychat如何改善音视频通话过程中的用户体验)
  2. 算法(三)、[海量] 数据处理
  3. linux-centos使用 wget命令获取jdk
  4. 《Python 学习手册4th》 第十六章 函数基础
  5. php $_SERVER详细参数解析
  6. 使用脚本开启客户端远程桌面
  7. 学***必去的网站“***基地”
  8. 链家网页爬虫_R爬虫小白入门:Rvest爬链家网+分析(一)
  9. 服务器虚拟机的关键特性,VMware Workstation的几大关键特性
  10. Nginx源码分析 - 主流程篇 - 平滑重启和信号控制(10)