day06:栈&队列&优先队列

目录

day06:栈&队列&优先队列

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

也就是后进先出(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

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

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

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

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

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


下一篇:day06