数据结构(壹) 队列
https://blog.csdn.net/weixin_43930512/article/details/90812460
1.数据结构与算法常见概念:
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构的逻辑结构:数据对象中数据元素之间的相互关系,分为线性结构、树形结构、图形结构以及集合结构。
数据结构的物理结构:数据的逻辑结构在计算机中的存储形式,分为顺序存储和链式存储(不连续存储)。
算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法五个基本特性:输入、输出、有穷性、确定性和可行性。
算法时间复杂度O(n):常数阶、线性阶、平方阶、对数阶、立方阶、nlogn阶、指数阶。
耗时排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2的n次方)<O(n!)<O(n^n)
———————————————
队列:个人的理解即为一种只允许从队首(head)进行删除,即出队;而在队尾(tail)进行插入,即入队的数据结构。
<这里head为队首,但tail = 队尾+1; 这是为了便于处理队列中只有一个元素的情况,所以当head=tail时,称为空队列。
先者于前,后者处后 FIFO原则
下面是一段队列的C语言代码
1 struct queqe
2 {
3 int data[100];//队列的主体
4 int head;//队首
5 int tail;//队尾
};
并附上相关的操作
1 struct queqe q;
2 q.head++;//出队
3 q.data[tail] = num;
4 q.tail++;//num 入队
通过查阅资料,C++的STL库中已经有队列的实现
1、库中queue的获取
队列和栈一样,存储在STD库中,可以通过#include<queue>获取
2、queue的定义
queue <T> q;其中T为int,char,float等等
3、主要功能函数
push(e):将元素e压入队列尾部
pop():将队列首部元素弹出,无返回
front():获取队列头部元素
back():获取队列尾部元素
empty():判断队列是否为空
size():取得队列的大小
————————————————
————————————————
1 #include <iostream> 2 #include<queue> 3 4 using namespace std; 5 6 int main() 7 8 { 9 10 queue<int> q; 11 12 for(int i=0;i<10;i++) 13 14 q.push(i); //将i压入队列的尾部 15 16 cout<<q.size()<<endl; 20 cout<<q.back()<<endl;//读取队列最后一个元素 21 22 while(!q.empty()) 23 24 { 25 26 cout<<q.front()<<" "; 27 28 q.pop(); //将队列头部元素弹出 29 30 } 31 32 cout<<endl; 33 34 cout<<q.size()<<endl; 35 36 37 return 0; 38 39 }
输出结果:
10
9
0 1 2 3 4 5 6 7 8 9
0
参考网址:https://blog.csdn.net/livecoldsun/article/details/25011413
应用习题
https://blog.csdn.net/sinat_40872274/article/details/81149852
下面我又阅读到了一种空间利用更加优良的队列,即循环队列
https://www.cnblogs.com/chenliyang/p/6554141.html 这位大佬的文章颇为形象。
https://www.cnblogs.com/MrSaver/p/5942106.html 这篇也是关于队列的一些介绍

浙公网安备 33010602011771号