队列(FIFO)先进先出
2017-12-18 19:31
162 查看
首先引用《啊哈算法》中的一个题,背景就不说了。大体意思就是输入一串数字首先将第一个数字删除,然后将第二个数放在末尾。依次循环,最后按照删除的顺序,把这些数连起来。
这里然后引入队列这个概念,队列是一种特殊的线性结构,只允许在队列的首部进行删除操作->出队,而在尾部进行插入操作->入队,当队列为空时,称为空队列。
队列的三个基本元素(一个数组,两个变量)
其次说一下这个题的代码:
#include<iostream>
using namespace std;
int main()
{
int q[102]= {0,6,3,1,7,5,8,9,2,4},head,tail;
head=1;
tail=10;
while(head<tail)
{
cout<<q[head]<<" ";
head++;
q[tail]=q[head];
head++;
tail++;
}
return 0;
}
首先解释一下代码的意思。第一步,定义一个头部和尾部。第一个数是被删除的,所以将第一个数输出。其次,在队列不是空队列的前提下运行,将第一个数输出后,头部往后移动一位。然后再将头部的值付给尾部,然后头部再加1,然后再进行循环。直到为空队列时停止。‘
一共有九个数(0不计算在内),定义尾部为第十位,这样可以防止头部和尾部重合时仍有数没有输出,这样的话就可以直接当head和tail重合时,直接停止运行,而不会对结果有影响。
然后用结构体来做这个题
#include<iostream>
using namespace std;
struct queue
{
int data[1000];
int tail;
int head;
};
int main()
{
int i;
struct queue q;
q.head=1;
q.tail=1;
for(i=1; i<=9; i++)
{
cin>>q.data[q.tail];
q.tail++;
}
while(q.head<q.tail)
{
cout<<q.data[q.head]<<" ";
q.head++;
q.data[q.tail]=q.data[q.head];
q.tail++;
q.head++;
}
return 0;
}
一开始首先定义一个结构体, int data[1000];(数组) int tail;(尾部) int head;(头部)。然后就是输入数字了,这个和第一种的方法相同,就不多进行赘述了。
不过用结构体有几个注意点。1,当访问结构体内部变量时,可以使用“.",这个小东西叫做成员运算符或者点号运算符。然后main函数里面时,一定要注意一定要注意一定要注意带上结构体,刚才在打的时候数组里面总是忘记加上"q."这个一定要注意。
这里然后引入队列这个概念,队列是一种特殊的线性结构,只允许在队列的首部进行删除操作->出队,而在尾部进行插入操作->入队,当队列为空时,称为空队列。
队列的三个基本元素(一个数组,两个变量)
其次说一下这个题的代码:
#include<iostream>
using namespace std;
int main()
{
int q[102]= {0,6,3,1,7,5,8,9,2,4},head,tail;
head=1;
tail=10;
while(head<tail)
{
cout<<q[head]<<" ";
head++;
q[tail]=q[head];
head++;
tail++;
}
return 0;
}
首先解释一下代码的意思。第一步,定义一个头部和尾部。第一个数是被删除的,所以将第一个数输出。其次,在队列不是空队列的前提下运行,将第一个数输出后,头部往后移动一位。然后再将头部的值付给尾部,然后头部再加1,然后再进行循环。直到为空队列时停止。‘
一共有九个数(0不计算在内),定义尾部为第十位,这样可以防止头部和尾部重合时仍有数没有输出,这样的话就可以直接当head和tail重合时,直接停止运行,而不会对结果有影响。
然后用结构体来做这个题
#include<iostream>
using namespace std;
struct queue
{
int data[1000];
int tail;
int head;
};
int main()
{
int i;
struct queue q;
q.head=1;
q.tail=1;
for(i=1; i<=9; i++)
{
cin>>q.data[q.tail];
q.tail++;
}
while(q.head<q.tail)
{
cout<<q.data[q.head]<<" ";
q.head++;
q.data[q.tail]=q.data[q.head];
q.tail++;
q.head++;
}
return 0;
}
一开始首先定义一个结构体, int data[1000];(数组) int tail;(尾部) int head;(头部)。然后就是输入数字了,这个和第一种的方法相同,就不多进行赘述了。
不过用结构体有几个注意点。1,当访问结构体内部变量时,可以使用“.",这个小东西叫做成员运算符或者点号运算符。然后main函数里面时,一定要注意一定要注意一定要注意带上结构体,刚才在打的时候数组里面总是忘记加上"q."这个一定要注意。
相关文章推荐
- 队列Queue FIFO先进先出 栈Stack FILO先进后出
- spring+mybatsi FIFO(先进先出)队列,解决并发问题
- 先进先出队列 FIFO
- 队列(Queue)——先进先出(FIFO)的数据结构(Data Structures)
- Java ArrayDeque、PriorityQueue 先进先出队列(FIFO)
- spring 在web 容器启动时,执行FIFO队列初始化方法
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。
- 用单链表与数组实现队列先进先出的数据结构
- FIFO表,STL队列的代码
- 页面置换算法-FIFO——设置页框的大小为n个物理块,在输入一个内存块需求序列:如3 2 1 3 2 5 2 3 6 2 1 4 2之后,屏显每次页面调度结果,并屏显置换率。(队列实现版)
- JS优先队列排序。出队时,先找出优先级最高的元素,再按照先进先出出队。
- 挺有意思的,队列,先进先出,排队进行!
- 先进先出队列(链表实现)
- 使用堆栈(Stack)模拟实现队列(FIFO)
- 用数组实现FIFO队列
- FIFO队列使用时出队列遇到的问题
- 用栈实现队列的先进先出结构
- 利用Queue队列实现FIFO的算法
- 请使用LinkedList来模拟一个队列(先进先出的特性): 1) 拥有放入对象的方法void put(Object o) 2)取出对象的方法Object get() 3)判断队列当中是否为空的方法b
- 先进先出(FIFO)置换算法