自己设置的纸牌游戏(简单数组栈和队列的设计)

星期天小白与小婷约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成俩份,每人拿一份。小白先拿出手中的第一张扑克牌放在桌上,然后小婷也拿出手中的第一张扑克牌,并放在小白刚打出的扑克牌上面,就像这样俩人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将俩张相同的牌以及中间所夹着的牌全部取走,并依次放到自己手中牌的末尾。当任意一个人的牌全部出完时,游戏结束,对手获胜!

现在,我为了方便测试只涉及一组数据,因为数据如果不对的话将永远循环下去。

现在假设小白的6张牌顺序为2 4 1 2 5 6,小婷的为3 1 3 5 6 4,最终谁会获胜呢?

自我心得:很有趣的小游戏,通过这个游戏,自己设置了一些符合自己需要的栈和队列,模拟的时候需保持全局观念,不然很容易出错。

最终情况为:
小婷 Win
小婷手中牌为:1 6 5 2 3 4 1
桌上牌为:3 4 5 6 2(注意桌上此时是从第一张开始显示的)

  1 #include<iostream>
  2 #include<vector>
  3 #include<iostream>
  4 using namespace std;
  5 struct myqueue
  6 {
  7     int date[100];
  8     int top;
  9     int tail;
 10     myqueue()
 11     {
 12         top=-1;
 13         tail=-1;
 14
 15     }
 16     int myempty()
 17     {
 18         return top==tail;
 19
 20
 21     }
 22    int mytop()
 23     {
 24         if(myempty())
 25             return 0;
 26         return date[top];
 27
 28
 29     }
 30     void myinsert(int x)
 31     {
 32         if(top==-1)
 33         {
 34             date[++top]=x;
 35             tail=1;
 36         }
 37         else
 38         {
 39             date[tail]=x;
 40             tail++;
 41
 42
 43         }
 44     }
 45     void mypop()
 46     {
 47         if(top<tail)
 48         top++;
 49         else
 50         {
 51             cout<<"空队列"<<endl;
 52         }
 53     }
 54     void print()
 55     {
 56         for(int i=top;i<tail;i++)
 57             cout<<date[i]<<" ";
 58             cout<<endl;
 59
 60     }
 61
 62
 63 };
 64 struct mystack
 65 {
 66     int date[100];
 67     int top;
 68
 69     mystack()
 70     {
 71         top=-1;
 72     }
 73     int mytop()
 74     {
 75         if(top==-1) return 0;
 76         return date[top];
 77     }
 78     void mypush(int x)
 79     {
 80         date[++top]=x;
 81     }
 82     void mypop()
 83     {
 84         if(top!=-1)
 85             top--;
 86     }
 87     int findx(int x)
 88     {
 89         int ok=-1;
 90         for(int i=top-1;i>=0;i--)
 91         if(date[i]==x) {ok=i;break;}
 92         return ok;
 93
 94
 95     }
 96     void popok(int x,myqueue &y)
 97     {
 98         for(int i=top;i>=x;i--)
 99                 y.myinsert(date[i]);
100         top=x-1;
101
102     }
103     void print()
104     {
105         for(int i=0;i<=top;i++)
106             cout<<date[i]<<" ";
107             cout<<endl;
108
109     }
110
111
112
113 };
114
115 int main()
116 {
117
118     myqueue x1,x2;
119     mystack x;
120     int a[6]={2,4,1,2,5,6};
121     int b[6]={3,1,3,5,6,4};
122     for(int i=0;i<6;i++)
123     {
124         x1.myinsert(a[i]);
125         x2.myinsert(b[i]);
126
127     }
128
129     while(!x1.myempty()&&!x2.myempty())
130     {
131
132         x.mypush(x1.mytop());
133         int t=x1.mytop();
134         x1.mypop();
135         if(x.findx(t)>=0)
136         {
137             x.popok(x.findx(t),x1);
138
139         }
140          if(x1.myempty()) break;
141         x.mypush(x2.mytop());
142         int m=x2.mytop();
143         x2.mypop();
144          if(x.findx(m)>=0)
145         {
146             x.popok(x.findx(m),x2);
147
148         }
149     }
150     if(x1.myempty()) {cout<<"小婷 Win"<<endl;
151     cout<<"小婷手中牌为:";
152     x2.print();
153     cout<<"桌子上牌为:";
154     x.print();
155
156
157     }
158     else {cout<<"小白 Win"<<endl;
159     cout<<"小白手中牌为:";
160     x1.print();
161     cout<<"桌子上牌为:";
162     x.print();
163     }
164     return 0;
165
166 }
时间: 2024-07-28 23:17:56

自己设置的纸牌游戏(简单数组栈和队列的设计)的相关文章

简单的栈和队列

1 /* 2 入门之栈(Stack)和队列(Queue) 3 在C++中STL中预置了<stack>和<queue> 4 简单介绍栈和队列的思想和使用方法 5 栈:先入后出(LIFO),可以理解为将球放进一个一段封闭的管子,只能从入口区出,先进的球只能最后出来 6 队列:先入先出(FIFO),可以理解为将球放进不封闭的管子,球从另一端出来,先进的球先出 7 常见应用:栈可以用于深搜(DFS),队列可以用于宽搜(BFS) 8 只有看看例子就可以很好的理解栈和队列了,简单的先介绍这些

简单方法快速记忆数组栈和队列函数

在js中,对数组的操作是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,今天来给大家用通俗易懂.简洁明了的几行文字,来告诉大家栈和队列的几个函数,如何快速记住. 首先,概念还是要知道的: 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻

快速记忆数组栈和队列函数push()和shift()

在js中,对数组的操作是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,今天来给大家用通俗易懂.简洁明了的几行文字,来告诉大家栈和队列的几个函数,如何快速记住. 首先,概念还是要知道的: 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻

[js]数组栈和队列操作

写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 栈是限定仅在表头进行插入和删除操作的线性表. 就

用数组结构实现大小固定的栈和队列

给定长度为size的数组,将其长度设置为大小为size的栈(队列),添加的数字如果超过了既定的长度就报错! 先实现栈(先进后出): 后实现队列(先进先出): 代码如下: 1 //例子:长度为6的数组,设置大小为6的栈,超过长度就会报错 2 //用数组结构实现大小固定的队列和栈 3 public class Bokeyuan { 4 //使用数组实现栈 5 public static class ArrayStack{ 6 private Integer[] arr;//数组 7 private

【数据结构】3. 栈和队列

目录 3.1 栈 3.1.1 栈的基本概念 (1)栈的定义 (2)栈的基本操作 3.1.2 栈的顺序存储结构 (1)顺序栈的实现 (2)栈的基本运算 (3)共享栈 3.1.3 栈的链式存储结构 3.2 队列 3.2.1 队列的基本概念 (1)队列的定义 (2)队列常见的基本操作 3.2.2 队列的顺序存储结构 (1)队列的順序存储 (2)循环队列 (3)循环队列的操作 3.2.3 队列的链式存储结构 (1)队列的链式存储 (2)链式队列的基本操作 3.2.4 双端队列 3.3 栈和队列的应用 3

使用栈和队列实现迷宫路径查找算法

0 综述 最近,接到老板的一个小任务,即实现个迷宫路径查找小程序,要求使用栈和队列去实现.不敢怠慢,我赶紧打开Visual Studio 2012,同时在稿纸上笔画着.题目如下:使用栈及队列分别设计一个算法进行迷宫路径查找(用下列二维数组表示迷宫,1表示不可通过,0表示可以通过,左上角2为起点,右下角3为终点). 1. 栈实现 迷宫路径查找的关键点在于对分支点的处理,使用栈来存储分支点坐标的实现方法称之为深度搜索算法.对于初始矩阵,从初始点2开始搜索四个方向上的路径并分别对路径进行合理标记,然后

剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题

一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如果我们只在数组中存一个数字,也先分配所有的内存. 扩展:动态数组(解决空间效率差),手段:扩容后,复制内容到新的数组,释放之前的内存.时间性能变差,因此,要尽量减少改变数组容量的次数. 数组与指针:声明一个数组时,数组名字也是一个指针,指向数组的第一个元素. 例题:在一个二维数组中,每一行都按照从左

【自考】数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇

学习目标 自考重点.期末考试必过指南,这篇文章让你理解什么是栈.什么是队列.什么是数组 掌握栈.队列的顺序存储结构和链式存储结构 掌握栈.队列的基本操作在顺序存储结构和链式存储结构上的实现 掌握矩阵的压缩存储 今天核心咱们先把栈搞清楚 栈和队列可以看做是特殊的线性表 .它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限的线性表 栈 栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行 基本概念 栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何