版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
数据结构
队列(First In,First Out)
1.卡片游戏
int que[100];
int main()
{
int n;
scanf("%d", &n);
memset(que, 0, sizeof(que));
for (int i = 1; i <= n; i++)
que[i] = i;
int front = 1; //队头元素
int rear = n+1; //队尾的后一个位置
while (front < rear)
{
printf("%d", que[front++]);
que[rear++] = que[front++];
}
return 0;
}
队列这种用法,我还真想不出来。以前只是把队列实现了,就没有然后了。这种方式,给我打开了一个全新的思路。
队头,队尾的应用,真的是太厉害了。
刘:这个程序有bug。他访问了非法的空间。即程序后期,que[rear++]=que[front++]读写了非法内存。要解决这个问题,要么把数组空间开大些,要么采取循环队列的方法。
STL队列
#include<iostream>
#include<queue> //头文件
using namespace std;
queue<int> q; //定义int型队列
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;
}
STL队列:
#include<<l>queue> //使用队列需要引用该头文件
queue<int> q; //定义队列
队列的基本操作(都有括号)
q.push()
q.front()
q.pop()
q.empty()