day06:栈&队列&优先队列

day06:栈&队列&优先队列

image

栈:限定只在表尾进行删除插入操作的线性表。

也就是后进先出(LIFO-last in first out):最后插入的元素最先出来。

把允许删除的一端称为栈顶(Top),另一端称为栈底(Bottom).不含任何数据元素的栈称为空栈。

栈的插入操作,叫作进栈,栈的删除操叫做出栈。

#include<iostream>
#include<stack>
using namespace std;
stack <int> stk;//定义
/* stack <int> stk;     //定义
stk.push(i);            //入栈
int num = stk.size();   //返回栈内元素的大小
bool flag = stk.empty();//如果栈为空返回true,否则返回false
int x = stk.top();      //返回栈顶,但不删除成员
stk.pop();              //从栈顶弹出一个成员 */
int main(){
    for(int i=0; i<10; i++) stk.push(i); //入栈
    cout<<"栈的大小"<<stk.size()<<endl;   //返回栈内元素的大小
    cout<<"栈内元素:";
    while(!stk.empty()){      //如果栈为空返回true,否则返回false
        cout<<stk.top()<<" "; //返回栈顶,但不删除成员
        stk.pop();            //从栈顶弹出一个成员
    }cout<<endl;
    cout<<"栈的大小:"<<stk.size()<<endl;
    return 0;
}
//运行结果
栈的大小:10
栈内元素:9 8 7 6 5 4 3 2 1 0 
栈的大小:0

队列

队列(Queue):是只允许在一端进行插入操作,在另一端进行删除操作的线性表。

(在队尾插入数据,队头删除数据)

也就是先进先出(FIFO-first in first out):最先插入的元素最先出来。

循环队列:队列的头尾相接的顺序存储结构称为循环队列。

#include<iostream>
#include<queue>
using namespace std;
queue<int> que; //定义
/* queue<int> que;      //定义
que.push(i);            //入队列
int num = que.size();   //返回队列内元素的个数
bool flag = que.empty();//如果队列为空返回true,否则返回false
int x = que.front();    //返回队首元素
int y = que.back();     //返回队尾元素
que.pop();              //从队首弹出一个成员*/
int main() {
    for(int i=0; i<10; i++)  que.push(i); //入队
    cout<<"队列的大小:"<<que.size()<<endl;//返回队列内元素的个数
    cout<<"队首元素:"<<que.front()<<endl;//队首元素 
    cout<<"队尾元素:"<<que.back()<<endl; //队尾元素
    cout<<"队列元素:";
    while(!que.empty()){
        cout<<que.front()<<" ";
        que.pop(); //从队首弹出一个成员
    } cout<<endl;
    cout<<"队列的大小:"<<que.size()<<endl;//返回队列内元素的个数
    return 0;
}
//运行结果
队列的大小:10
队首元素:0
队尾元素:9
队列元素:0 1 2 3 4 5 6 7 8 9 
队列的大小:0

这里由于时间问题只是简单介绍了一下,更多的看这里

栈与队列:https://www.cnblogs.com/hellohebin/p/15677386.html

STL:https://www.cnblogs.com/hellohebin/p/15677412.html

优先队列

优先队列:队列中的元素被赋予优先级,当访问元素时,具有最高优先级的元素最先删除。

优先队列具有最高级先出 (first in, largest out)的行为特征

优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。

//升序队列,小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//降序队列,大顶堆
priority_queue <int,vector<int>,less<int> >q;

/*greater和less是std实现的两个仿函数
就是使一个类的使用看上去像一个函数。
其实现就是类中实现一个operator(),
这个类就有了类似函数的行为,就是一个仿函数类了*/

优先队列的本质就是堆,一棵完全二叉树
二叉树与堆:https://www.cnblogs.com/hellohebin/p/15743136.html

对于优先队列还有更多的知识点,这里暂不多述,如有兴趣,可以参考下面两篇文章。

参考资料:
c++优先队列(priority_queue)用法详解
C++STL——优先队列

posted @ 2021-08-06 16:51  HelloHeBin  阅读(102)  评论(0编辑  收藏  举报