c - 数据结构: Circular Queue (in C)

标签 c data-structures queue

我正在做一个 Uno Card 游戏(C 语言),并且我有一个按以下顺序排列的循环队列:

用户 -> 玩家1 -> 玩家2 -> 玩家3

如果任何玩家在牌 table 上放入一张改变游戏顺序的牌,则方向相反。

例如,如果用户放置“反向”卡,我就必须使每个玩家出队并像这样入队:

enqueue(player3);
enqueue(player2);
enqueue(player1);
enqueue(user);

如果玩家1,则将所有人出队,然后:

enqueue(user);
enqueue(player3);
enqueue(player2);
enqueue(player1);

如果玩家2,则将所有人出队,然后:

enqueue(player1);
enqueue(user);
enqueue(player3);
enqueue(player2);

如果是player3,则将所有人出队,然后:

enqueue(player2);
enqueue(player1);
enqueue(user);
enqueue(player3);

太可怕了,不是吗?可以这样说,就像对任何情况都有一个“如果”。我知道,当有人放置“反向”卡时,首先要做的就是让所有人出队,但之后,是否有更好的方法按照上述想法进行入队?

最佳答案

你不能用一个简单的索引和一个步长(+1或-1)来做到这一点吗?

索引 = { 玩家 1, 玩家 2, 玩家 3, 用户 } 步骤= {顺时针,逆时针}

当打出反向牌时,只需改变步骤的符号即可?

  • 开始:index=player1,step=顺时针(+1)
  • 重复
    • 玩家打牌...如果相反,step = !step
    • 移至下一个玩家:索引 += 步骤
  • 直到结束

    显然,索引需要边界检查等,但你得到了主体

关于c - 数据结构: Circular Queue (in C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912770/

相关文章:

c - 在 C 中使用共享内存添加数组元素

c++ - 这种类型的内存管理有用例吗?

java - 矩阵中的最小分割数

c++ - 在 while 循环内的变量中分配新内存

c++ - 对类型 '' 的非常量左值引用无法绑定(bind)到类型 ' *' 的临时对象

c - C 程序的主函数是否会回收堆栈?

c - 为什么 inet_ntop() 和 inet_ntoa() 给出不同的结果?

java - 存储多个相关值进行排序的最有效方法?

c - 以结构化方法实现队列

c - 错误: 'else' without a previous if