队列、栈及其基本应用

队列、栈及其基本应用

【学习目标】

1.理解队列、栈的概念,掌握队列、栈的基本操作;

2.学会使用队列、栈解决一些实际问题。

【知识梳理】

一、队列

(一)队列的含义

队列也被称作“先进先出”线性表(FIFO,First In First Out)。类似于生活中排队购票,先来先买,后来后买。

在不断入队、出队的过程中,队列将会呈现出以下几种状态:

队空:队列中没有任何元素。

队满:队列空间已全被占用。

溢出:当队列已满,却还有元素要入队,就会出现“上溢(overflow)”;当队列已空,却还要做“出队”操作,就会出现“下溢(underflow)”。两种情况合在一起称为队列的“溢出”。

(二)队列的头文件

队列需要以下头文件:

#include

(三)队列的声明

队列声明的基本结构:

queue<数据结构>队列名;

如:queue i;

queue d;

queue n;//node是一个结构体

(四)队列的基本操作

首先,queue q;

q.size();//返回q里元素个数

q.empty();//返回q是否为空,空则返回1,否则返回0

q.push(k);//在q的末尾插入k

q.emplace(arg);//将元素arg放置到队列的尾部,作用和push一样

q.pop();//删掉q的第一个元素

q.front();//返回q的第一个元素

q.back();//返回q的末尾元素

(五)队列练习与应用

1.队列的基本操作

2.P2058海港(NOIP2016普及组)

 (六)小结

NOIP中直接考查队列的题目不多,但是广度优先搜索(BFS)类的题目是借助队列来实现的,而且有些题目可以用优先队列的思想去做。本节课重点掌握用数组模拟队列实现以及STL中队列的基本操作。

二、栈

(一)栈的定义

栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

栈也是一种线性表,只不过栈比较特殊,它的运算和操作受限,不同于链表,栈的元素插入和删除仅限于在其一端进行操作。

也就是说,栈这个容器,只能操作当前的首元素,其他元素不可见也不可访问更不可更改。

我们假想栈是一个顶端开口底部封闭的“容器”,我们只能从栈顶“加入物品”,也只能从栈顶“取出物品”,栈有先进后出或后进先出的特点。

(二)栈的相关概念

(1)栈顶(top())与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。 

(2)压栈( push() ):栈的插入操作,叫做进栈,也称压栈、入栈。 

(3)弹栈( pop() ):栈的删除操作,也叫做出栈。 

(三)栈的基本操作

1.初始化

使用数组实现栈时,初始状态为top=0,表示栈里没有任何元素,即空栈。

void clear(){

top=0;

}

2.判空

bool empty(){

if(top==0) return 1;

else return 0;

}

3.求栈中实际元素的个数

int size(){

return top;

}

4.进栈(压栈)

你可能感兴趣的:(算法,c++,算法,学习)