参考了部分--http://blog.csdn.net/lpp0900320123/article/details/20694409

的代码原理,采用数组实现了循环队列,解决了卡片游戏问题

嵌入式系统中循环队列可以在接收数据时节省空间。

一下是queue.h文件,需要注意的是,在使用模板类时,声明代码和实现代码应该放在同一个文件下,即一个.h文件中,若分开则会报错。

#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
/******************************************************************************* 以数组方式实现循环队列,而不是链表* 采用模板类,实现不同类型的循环队列 * 循环队列长度为固定长度(1)队列初始化时,front和rear值都为零;
(2)当队列不为空时,front指向队列的第一个元素,rear指向队列最后一个元素的下一个位置;
(3)当队列为空时,front与rear的值相等,但不一定为零;假设数组的存数空间为7,此时已经存放1,a,5,7,22,90六个元素了,如果在往数组中添加一个元素,
则rear=front;此时,队列满与队列空的判断条件front=rear相同,这样的话我们就不能判断队列到底是空还是满了;
解决这个问题有两个办法:一是增加一个参数,用来记录数组中当前元素的个数;第二个办法是,少用一个存储空间,
也就是数组的最后一个存数空间不用,当(rear+1)%maxsiz=front时,队列满;********************************************************************************/
const int MAX = 10 + 1;
template <class type>class CycleQueue
{
private:type items[MAX];int front;int rear;public:CycleQueue();~CycleQueue();bool DeQueue(type *val);bool EnQueue(type val);bool IsEmpty();bool IsFull();void OutData(type *addr, int len);
};template <class type>
CycleQueue<type>::CycleQueue()
{front = rear = 0;memset(items, 0, sizeof(items));
}template <class type>
CycleQueue<type>::~CycleQueue()
{
}template <class type>
bool CycleQueue<type>::DeQueue(type *val)
{if (IsEmpty()){return false;}else{*val = items[front];front = (front + 1) % MAX;}return true;
}template <class type>
bool CycleQueue<type>::EnQueue(type val)
{if (IsFull()){return false;}else{items[rear] = val;rear = (rear + 1) % MAX;}return true;
}template <class type>
bool CycleQueue<type>::IsFull()
{if (((rear + 1) % MAX) == front){return true;}return false;
}template <class type>
bool CycleQueue<type>::IsEmpty()
{if (rear == front){return true;}return false;
}template <class type>
void CycleQueue<type>::OutData(type *addr, int len)
{int count = 0;if (front < rear){for (int i = front; i < rear; i++){if (count++ >= len){break;              //防止内存越界}addr[count] = item[i];}}else{for (int i = front; i < MAX; i++){if (count++ >= len){break;              //防止内存越界}addr[count] = item[i];}for (int i = 0; i < rear; i++){if (count++ >= len){break;              //防止内存越界}addr[count] = item[i];}}
}
#endif

卡片游戏问题的主函数部分

#include <stdio.h>
#include "queue.h"int main()
{int val;CycleQueue<int> MyQueue;for (int i = 0; i < 7; i++){MyQueue.EnQueue(i + 1);}while (MyQueue.IsEmpty() == false){MyQueue.DeQueue(&val);printf("%d ",val);if (MyQueue.IsEmpty() == true){break;}MyQueue.DeQueue(&val);MyQueue.EnQueue(val);}system("pause");return 0;
}

卡片游戏--循环队列实现相关推荐

  1. c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)

    #include #include typedef struct node { int *base; int front; int rear; }Node; /* 思路: *使用一个顺序循环队列来存放 ...

  2. 卡片游戏(队列的基础运用)

    题目描述 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号1~n.当至少还剩1张牌时进行以下操作: 1.把第一张牌扔掉 2.然后把新的第一张牌放到整叠牌的最后. 输入n,输出每次扔掉的牌 ...

  3. 利用JS实现循环队列--击鼓传花游戏

    由于队列经常被应用在计算机领域和我们的现实生活中,就出现了一些队列的修改版,其中一种叫做循环队列. 循环队列的一个例子就是击鼓传花游戏. 在这个游戏中,孩子们围成一个圆圈,把花尽快的传递给旁边的人.某 ...

  4. bootstrap项目实例_Vue.js 项目实践——创建记忆卡片游戏

    作者:Jiawei Pan 转发链接:https://mp.weixin.qq.com/s/VXPD2p7q2S3yR9I7lzAkfw 前言 如果你刚开始学习 Vue,想巩固基础知识,那么你可以试试 ...

  5. 利用循环队列的思想进行加密解密(洛谷P1914题题解,Java语言描述)

    前言 在我看来,理解循环队列对我们思考问题的帮助就是: 合理利用"%"的约束,将问题的"越界"重新弹回问题范围内. 本文就是一个例子,循环队列的思想为我快速秒杀 ...

  6. Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现

    版本:VS2015 语言:C++ 本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了. 今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高,一下子会有一大 ...

  7. python循环队列_JS 队列-优先队列、循环队列

    <学习JavaScript数据结构与算法>读书笔记. 队列是遵行FIFO(First In First Out, 先进先出)原则的一组有序的项.队列再尾部添加新元素,并从顶部移除元素. 在 ...

  8. 三、队列:优先队列+循环队列(击鼓传花算法)

    队列: 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项.队列在尾部添加新元素,并从顶部移除元素.最新添加的元素必须排在队列的末尾. 在现实中, ...

  9. leetcode649(Dota2 参议院:循环队列)

    Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一个基于轮为过程的投 ...

最新文章

  1. .net讀取指定節點的值
  2. Python基础10 反过头来看看
  3. nodejs html引用js_NodeJS与模块系统
  4. 【Solidity】3.类型 - 深入理解Solidity
  5. pr文字转语音有插件吗_文字转语音软件深度解析
  6. 凹入表形式打印树形结构_【树形立方体】立方体有哪些特性?
  7. java中stack集合框架
  8. c语言中0xof423什么意思,C语言指针 百思不得其解的一个问题
  9. 【Elasticsearch】 es include_type_name unless the include_type_name parameter is set to true
  10. 【NOIP1999】【codevs1083】Cantor表(找规律)
  11. 计算机子网掩码作用,子网掩码计算器有什么用,有哪些优势
  12. librdkafka自动源码编译
  13. qgridlayout 滚动时固定第一行_滚动轴承组合设计应考虑的问题
  14. PHP HTML转PDF
  15. ASPICE过程开发
  16. android 播放流媒体_30个最佳和免费的Android媒体播放器
  17. TCP 重传、滑动窗口、流量控制、拥塞控制
  18. 图书馆管理系统(详细)(C语言版本)
  19. 从入门到精通!一个三非渣本的Android校招秋招之路,终局之战
  20. 酷睿i7 8565u属于什么级别 i78565u相当于什么水平

热门文章

  1. Android项目---快递查询
  2. php 斐多纳契数列,菲波纳契数列对股市的影响
  3. PLC转行嵌入式软件开发的辛路历程
  4. 本科,硕士们进了BAT拿高工资,为什么博士却要挤破头低薪进985高校?
  5. 基于ROCKCHIP的ubuntu-base根文件系统构建
  6. 手游开发Android平台周边工具介绍
  7. C语言:有一个一维数组score,内放10个学生成绩,求平均成绩。
  8. oracle移动文件命令是什么意思,Oracle使用命令移动各类文件的方法
  9. 110种有趣的游戏和应用
  10. linux服务器定时执行python代码