栈和队列

栈和队列

栈和队列都是比较常用的数据结构。栈的应用非常的广泛,比如说,递归函数的实现就是借助于栈保存相关的数据。
操作系统中每个线程也会使用栈来保存函数调用涉及到的一些参数和其他变量等。栈最大的一个特点就是先进后出(FILO—First-In/Last-Out)。
队列和栈不同的是,队列是一种先进先出(FIFO—first in first out)的数据结构。

1.栈

头文件: #include<stack>
栈是后进先出(Last In Fisrt Out)的一种特殊的线性表。

栈可以存储多种类型数据,包括但不限于int char string double以及pair等等。
栈的基本操作如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
stack<int>S;     //定义栈
S.push(x); //入栈——入栈是把元素压入栈底;
S.pop(); //出栈——出栈是删除栈顶元素;
S.top(); //取栈顶元素——取栈顶元素只返回元素,不删除;
S.empty(); //判断栈是否为空——的判空一般都和 while 循环配套使用,比如下面代码输出栈内所有元素,并清空栈。若为空,则返回true
S.size(); //获取栈的大小——获取栈的大小返回栈內元素数量;

注: empty的一般用法:
while(!S.empty())
{
cout<<S.top()<<endl;
S.pop();
}

2.队列

头文件是#include<queue>
注意:一般用到优先队列的时候都会用到结构体

结构体:struct 结构体名称{ }自定义命名; eg:struct node{}student;
在运用结构体的时候一般在输入的时候,可以直接带着结构体的方式输入

优先队列:用的时候为priority_queue

详解链接:https://blog.csdn.net/c20182030/article/details/70757660

friend bool operator==(const Sales_item&, const Sales_item&);的用法:

1
2
3
4
这个函数是友元函数,返回的是booloperator是用于运算符重载的,判断两个
Sales_item类型的数据时否相等,

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。
1
2
3
4
operator是重载的意思
operator _运算符号_ (参数)
所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。
---------------- The End ----------------
0%