• 栈和队列


    卡片游戏

    桌面上有一叠牌,从第一张牌开始从上往下一次编号为1-n.当至少还剩下两张牌时进行一下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。输入n,输出每次扔掉的牌,以及最后剩下的牌。

    样例输入:7

    样例输出:1 3 5 7 4 2 6

     1 #include "stdafx.h"
     2 #include<iostream>
     3 using namespace std;
     4 
     5 int _tmain(int argc, _TCHAR* argv[])
     6 {
     7 int num[100];
     8 int inputNum;
     9 cin>>inputNum;
    10 for(int i = 1;i<=inputNum;++i)
    11 {
    12     num[i-1]=i;
    13 }
    14 int renum=0;//用于记录输出字数
    15 int curnum=0;
    16 int len = inputNum-1;
    17 while(renum!=inputNum)
    18 {
    19     cout<<num[curnum]<<" ";
    20     curnum++;
    21     len++;
    22     num[len]=num[curnum];
    23     curnum++;
    24     renum++;
    25 }
    26 return 0;
    27 }

    运行结果没有错误,但是存在bug.像用curnum记录当前的下标. 最后会达到2倍inputNum的大小,也就是说可能运行到后期,会读写非法内存,除非把数组空间开大或者才去一种称为循环队列的技术.

     1 #include "stdafx.h"
     2 #include<iostream>
     3 #include<queue>
     4 using namespace std;
     5 
     6 queue<int> q;
     7 int _tmain(int argc, _TCHAR* argv[])
     8 {
     9     int n;
    10     cin>>n;
    11     for(int i = 0;i!=n;++i) q.push(i+1);
    12     while(!q.empty())
    13     {
    14         cout<<q.front()<<endl;
    15         q.pop();
    16         if(q.empty())
    17         {
    18             break;
    19         }
    20         q.push(q.front());
    21         q.pop();
    22     }
    23 return 0;
    24 }

    这就是STL队列.

  • 相关阅读:
    Java多态性理解
    多态详解
    public static void main(String[] args){}函数诠释
    继承、封装
    面向对象的理解
    重载与构造函数的解析
    冒泡排序及二分查找
    数组总结之补充
    计算机中如何表示数字-07IEEE754浮点数标准
    synchronized 和ReentrantLock
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3519866.html
Copyright © 2020-2023  润新知