数据结构复习——队列解决报数问题
2017-07-03 15:03
225 查看
循环队列的一些知识点:
1、初始时front和rear指针都为0
2、队满条件为:
(rear+1)%MaxSize==front
3、队空条件为
rear==front
4、顺序队类型定义如下
问题描述:
n个人站成一排,编号分别为1~n,左往右“1,2,1,2”报数,数到1的人出列并报出自己的编号,数到2的人加入队尾(即数到2的人从队首立即进入队尾,不报自己的编号)。
解决思路:
0、利用循环队列,先进先出,即使先数到2的人被加入了队尾,也会比后数到2的人先报号
1、用1~n这n个数字初始化队列,即先将n个人进队
2、判断队列是否为空,若不为空执行下一步
3、将当前队首的人出列,并报号
4、将当前队首的人出列并加入队尾,不报号
5、返回第2步
1、初始时front和rear指针都为0
2、队满条件为:
(rear+1)%MaxSize==front
3、队空条件为
rear==front
4、顺序队类型定义如下
typedef struct { ElemType data[MaxSize]; int front,rear; }
问题描述:
n个人站成一排,编号分别为1~n,左往右“1,2,1,2”报数,数到1的人出列并报出自己的编号,数到2的人加入队尾(即数到2的人从队首立即进入队尾,不报自己的编号)。
解决思路:
0、利用循环队列,先进先出,即使先数到2的人被加入了队尾,也会比后数到2的人先报号
1、用1~n这n个数字初始化队列,即先将n个人进队
2、判断队列是否为空,若不为空执行下一步
3、将当前队首的人出列,并报号
4、将当前队首的人出列并加入队尾,不报号
5、返回第2步
#include <iostream> using namespace std; typedef struct { int data[50]; int front, rear; }SqQueue; void number(int n)//报数问题 { int i, e; SqQueue q; q.front = q.rear = 0; for (i = 1; i <= n; i++)//init queue { q.rear = (q.rear + 1) % 50;//队列最长为50 q.data[q.rear] = i; } cout << "初始序列为:" << endl; for (i = 1; i <= n; i++) { printf("%d ",q.data[i]); } printf("\n "); cout << "出队顺序为:" << endl; while (q.front != q.rear)//当队列不空时循环 { q.front = (q.front + 1) % 50; e = q.data[q.front]; cout << e << " "; if (q.front == q.rear) { break; } else { q.front = (q.front + 1) % 50; e = q.data[q.front]; q.rear = (q.rear + 1) % 50; q.data[q.rear] = e; } } cout << endl; } int main() { int n = 8; number(8); system("pause"); }
相关文章推荐
- 数据结构(C#)-- 贪心算法解决背包问题
- 问题解决——在结构体中使用set保存结构体数据
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构——士兵队列训练问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构之链式队列与链式栈的应用-球钟问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构大作业中遇到的问题及解决(一)
- 数据结构之链表——环相关问题及解决思路汇总
- 数据结构复习(重写某些重要数据结构API) ------------队列
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构之非递归解决0-1背包问题
- 黑马程序员--C语言之数据结构解决问题
- 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
- [150422][C++]数据结构复习——队列实现源码
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 奥运场馆规划问题(数据结构解决)
- 递归:解决汉诺塔问题(数据结构3.2 P103)