1.前言
在前几分钟,我写完了关于栈的介绍具体情况请点这里。
毕竟(也是)一年前的知识了,有点遗忘,所以如有错误请大家在评论区指出,我会修改的。
趁着手感火热,赶紧再来写一篇关于队列的文章。(QWQ)
2.正文
2.1队列的介绍
队列是一种能从两端进行操作,并遵守先进先出原则的储存结构。
队列的操作和栈的操作就是队列两端都能操作,而栈只能选一端操作。
2.2队列的基本术语
在队列中添加元素叫入队,而在队列中删除元素则叫出队。
一般来说,我们都将元素进入队列的那一端称为队尾,而与之相对的另一端则叫队首。
2.3队列原则间接导致的后果
由于队列遵守先进先出的原则,所以最先进的元素最先出,最后进的元素最后出。
2.4队列的形象理解
把队列想象成一个正在超市里买东西的队伍,排在最前面的人最先付钱,最先走,而排在最后面的人最后付钱,最后走。
2.5队列的具体代码
由于队列两端都有可能进行操作,所以要定义两个指针pop和front。
front指向队首的位置,而pop则指向队尾的位置
那么代码大致是这样的,意思也同样写在了代码里:
#include<bits/stdc++.h> using namespace std; int dl[10005];//队列数组 int pop=0;//队尾 int front=1;//队首 int main() { int n,x; cin>>n; for(int i=1;i<=n;i++) { cin>>x; pop++; dl[pop]=x; } /*如果n是4,x分别等于1、3、5、7 那么dl[1]=1 dl[2]=3 dl[3]=5 dl[4]=7 front=1 pop=4*/ front++;/*如果最前面的人付好钱了, 那么现在队首就是原本队伍的第二个人 */ pop--;/*如果后面的人等不及了, 想换到另外一个更短的队伍, 他就退出了队伍*/ for(int i=front;i<=pop;i++)/*输出 剩下人所需付的钱*/ { cout<<dl[i]<<" "; } return 0; }又假设有人有急事,他想插个队,其他人也同意了,那么他后面的人编号全得往后面移一位,代码大概是这样,意思还是写在了代码里:
#include<bits/stdc++.h> using namespace std; int dl[10005];//队列数组 int pop=0;//队尾 int front=1;//队首 int main() { int n,x; cin>>n; for(int i=1;i<=n;i++) { cin>>x; pop++; dl[pop]=x; } /*如果n是4,x分别等于1、3、5、7 那么dl[1]=1 dl[2]=3 dl[3]=5 dl[4]=7 front=1 pop=4*/ cin>>x;/*假设这个想插队的人 插在了编号二,x表示他要在 超市里付的钱*/ /*那么得先空出来一个位置, 这个人再插到这个空位里*/ pop++;//最后面的人往后移 for(int i=pop;i>=2+1;i--) { swap(dl[i-1],dl[i]); } /*由于要把空出来的一个位置 换到第二个位置, 所以循环换到第三个位置即可, 不然循环到第二个位置就把空 出来的位置换到第一位了*/ //for循环的过程 //7531 原本 //07531 空了一个位置后 //70531 换了一次 //75031 换了两次 //75301 换了三次 //10357 正序 //下一行是这个队列每个元素对应的下标 //12345 dl[2]=x; for(int i=front;i<=pop;i++) { cout<<dl[i]<<" "; } return 0; }关于队列的我就讲到这里。
那么……
(逃!)
新手小白(提高A)