数据结构小知识

来源:互联网 发布:ubuntu deb 安装 编辑:程序博客网 时间:2024/04/27 15:56

卡片游戏:

         桌上有一叠纸牌,从第一张牌(即位于顶端的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行一下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。

         输入n,输出每次扔掉的牌,以及最后剩下的牌。

         样例输入:9

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

通过这个例子可以演示C++中队列的机制

/****C++队列的使用*****/#include<iostream>#include<queue>using namespace std;queue<int>q;    //建立队列int main(){    int n;    cin>>n;    for(int i=0;i<n;i++)    q.push(i+1);       //初始化队列    while(!q.empty())    {        cout<<q.front()<<" ";//打印队首元素        q.pop();            //抛弃队首元素        q.push(q.front());  //把新的队首元素加入队尾        q.pop();            //抛弃队首元素    }    return 0;}
程序运行结果:

队列和栈是数据结构中很重要的数据存储体,下面演示队列和栈的一个最简单的区别:

/****演示队列和栈的区别***/#include<iostream>#include<stack>#include<queue>using namespace std;stack<int>s;    //建立栈queue<int>p;    //建立队列int main(){    int n;    cin>>n;    for(int i=1;i<=n;i++)    {s.push(i);p.push(i);}//初始化队列和栈    for(int i=1;i<=n;i++)    {        cout<<s.top()<<" ";//输出栈        s.pop();    }cout<<endl;    for(int i=1;i<=n;i++)    {        cout<<p.front()<<" ";//输出队列        p.pop();    }    return 0;}
程序运行结果:


在编写程序时,调试少不了。而我们如何获得调试用的数据呢?显然,人为的输入一些测试数据显然效率低下,

这里引入C语言中的随机数发生器,用来获得海量的测试数据。

/****演示随机数发生器***/#include<iostream>#include<cstdlib>   //rand()和srand()需要#include<ctime>     //time()需要的头文件using namespace std;int main(){    int m,r=10;//r是随机数的上界,且随机数不能等于r    double n;    srand(time(0));//只在且只能在函数开始初始化一次    for(int i=0;i<6;i++)//产生6组,每组10个随机数    {        for(int j=0;j<10;j++)  //产生10个随机数        {        n=(double)rand()/RAND_MAX;//产生0-1之间的小数        m=(int)(n*(r-1)+0.5);//确保生成的随机数不会大于10        cout<<m<<" ";        }        cout<<endl;    }    return 0;}
程序结果:







0 0
原创粉丝点击