卡片游戏--循环队列实现
参考了部分--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;
}
卡片游戏--循环队列实现相关推荐
- c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)
#include #include typedef struct node { int *base; int front; int rear; }Node; /* 思路: *使用一个顺序循环队列来存放 ...
- 卡片游戏(队列的基础运用)
题目描述 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号1~n.当至少还剩1张牌时进行以下操作: 1.把第一张牌扔掉 2.然后把新的第一张牌放到整叠牌的最后. 输入n,输出每次扔掉的牌 ...
- 利用JS实现循环队列--击鼓传花游戏
由于队列经常被应用在计算机领域和我们的现实生活中,就出现了一些队列的修改版,其中一种叫做循环队列. 循环队列的一个例子就是击鼓传花游戏. 在这个游戏中,孩子们围成一个圆圈,把花尽快的传递给旁边的人.某 ...
- bootstrap项目实例_Vue.js 项目实践——创建记忆卡片游戏
作者:Jiawei Pan 转发链接:https://mp.weixin.qq.com/s/VXPD2p7q2S3yR9I7lzAkfw 前言 如果你刚开始学习 Vue,想巩固基础知识,那么你可以试试 ...
- 利用循环队列的思想进行加密解密(洛谷P1914题题解,Java语言描述)
前言 在我看来,理解循环队列对我们思考问题的帮助就是: 合理利用"%"的约束,将问题的"越界"重新弹回问题范围内. 本文就是一个例子,循环队列的思想为我快速秒杀 ...
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
版本:VS2015 语言:C++ 本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了. 今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高,一下子会有一大 ...
- python循环队列_JS 队列-优先队列、循环队列
<学习JavaScript数据结构与算法>读书笔记. 队列是遵行FIFO(First In First Out, 先进先出)原则的一组有序的项.队列再尾部添加新元素,并从顶部移除元素. 在 ...
- 三、队列:优先队列+循环队列(击鼓传花算法)
队列: 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项.队列在尾部添加新元素,并从顶部移除元素.最新添加的元素必须排在队列的末尾. 在现实中, ...
- leetcode649(Dota2 参议院:循环队列)
Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决定.他们以一个基于轮为过程的投 ...
最新文章
- .net讀取指定節點的值
- Python基础10 反过头来看看
- nodejs html引用js_NodeJS与模块系统
- 【Solidity】3.类型 - 深入理解Solidity
- pr文字转语音有插件吗_文字转语音软件深度解析
- 凹入表形式打印树形结构_【树形立方体】立方体有哪些特性?
- java中stack集合框架
- c语言中0xof423什么意思,C语言指针 百思不得其解的一个问题
- 【Elasticsearch】 es include_type_name unless the include_type_name parameter is set to true
- 【NOIP1999】【codevs1083】Cantor表(找规律)
- 计算机子网掩码作用,子网掩码计算器有什么用,有哪些优势
- librdkafka自动源码编译
- qgridlayout 滚动时固定第一行_滚动轴承组合设计应考虑的问题
- PHP HTML转PDF
- ASPICE过程开发
- android 播放流媒体_30个最佳和免费的Android媒体播放器
- TCP 重传、滑动窗口、流量控制、拥塞控制
- 图书馆管理系统(详细)(C语言版本)
- 从入门到精通!一个三非渣本的Android校招秋招之路,终局之战
- 酷睿i7 8565u属于什么级别 i78565u相当于什么水平