队列
对列是先入先出,只需要把头和尾标记清楚,如果第一个数出去了,那么把头的序号加一就行,如果加入一个数,那么把数存入最后,尾号再加一就行了,比较省时间,但是浪废空间。队尾指向最后一个数的下一位。
- 队列可以用数组,也可以用结构体,同时也可以直接用别人写好的数据结构队列。
用数组写队列
#include<stdio.h>
int main()
{
int q[102]={0,6,3,1,7,5,8,9,2,4},head,tail;
//初始化队列
head=1;
tail=10;
while(head<tail)
{
//打印队首并将队首出队
printf("%d",q[head]);
head++;
//将新的队首的数添加到队尾
q[tail]=q[head];
tail++;
//再将队首出队
head++;
}
return 0;
}
用结构体写队列
#include<stdio.h>
struct queue
{
int data[100];//队列主体,用来存储
int head;//队首
int tail;//队尾};
int main()
{
struct queue q;
int i;
//初始化列
q.head=1;
q.tail=1;
for(int i=1;i<9;i++)
{
//依次向队列插入9个数
scanf("%d",&q.data[q.tail]);
q.tail++;
}
while(q.head<q.tail)
{
//打印队首并将队首出队
printf("%d",q.data[q.head]);
q.head++;
//先将新队首的数添加到队尾
q.data[q.tail]=q.data[q.head];
//再将队首出队
q.head++;
}
return 0;
}
直接包含头文件queue
参考文章C++数据结构——队列
使用标准库的队列时, 应包含相关头文件,在栈中应包含头文件: #include< queue> 。定义:queue< int > q;
q.empty() 如果队列为空返回true,否则返回false
q.size() 返后队列中元素的个数
q.pop() 删除队列首元素但不返回值
q.front() 返回队首元素的值,但不删除该元素
q.push() 在队尾压入新元素
q.back() 返回队尾元素的值,但不删除该元素
#include <queue>
#include <iostream>
using namespace std;
int main()
{
queue<int> q;
for (int i = 0; i < 10; i++)
{
q.push(i);
}
if (!q.empty())
{
cout << "队列q非空!" << endl;
cout << "q中有" << q.size() << "个元素" << endl;
}
cout << "队头元素为:" << q.front() << endl;
cout << "队尾元素为:" << q.back() << endl;
for (int j = 0; j < 10; j++)
{
int tmp = q.front();
cout << tmp << " ";
q.pop();
}
cout << endl;
if (!q.empty())
{
cout << "队列非空!" << endl;
}
system("pause");
return 0;
}