一:栈的概念 栈(stack)又名堆栈,是一种操作受限的线性表,只能在表的一端进行插入和删除操作,这一端 被称为栈顶,相对的,另一端被称为栈底。 向栈内添加新元素的操作叫做入栈、进栈、压栈, 删除元素叫做出栈、退栈。 由于栈中元素只能在一端进出,所以最先进入栈中的元素反而在最后才能出去,所以栈又被称作先进 后出(FILO—first in last out)线性表。
二:STL中stack的使用 (常见用法)
#include // 引入头文件
stack s; // 新建栈s, 栈中元素类型为int. 还可以为 int、double、string等
s.push(node); // 入栈操作,node元素入栈,node为定义的type类型
s.top(); // 获取 栈顶元素
s.pop(); // 出栈操作,删除栈顶的元素
s.size(); // 返回栈中元素数量
s.empty(); // 判断栈是否为空,如果为空则返回true
三: 栈练习 (1) 竞赛考题 在竞赛中,栈不只会在代码中用到,还会在非代码的选择题中遇到,做这类型题时,只要铭记任何 时候都有可能出栈即可完成:
【例1】元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第一个出栈的是R3,那么 第五个出栈的不可能是( ) A.R1 B.R2 C.R4 D.R5
【例2】对于入栈顺序为a, b, c, d, e, f, g 的序列,下列 ( ) 不可能是合法的出栈序列。 A. a, b, c, d, e, f, g B. a, d, c, b, e, g, f C. a, d, b, c, g, f, e D. g, f, e, d, c, b, a
(2) 基础练习 编写程序,使用STL中的stack库操作栈。 输入一个整数N ,表示有N个整数。 定义一个栈(stack),接下来输入N个整数,将其保存在栈中。 要求:第一行输出栈中元素的个数(使用size()函数) 进行一次出栈操作,第二行输出栈中元素的个数 第三行输出栈中的元素,以空格隔开
【输入】 6 6 4 7 9 2 1
【输出】 元素个数:6 元素个数:5 2 9 7 4 6
(3) 括号匹配 代码中经常会出现多对括号互相嵌套的结构,小明发现只要匹配能够完成,无论多么复杂的嵌套结 构程序都能正确运行,而只要有一个地方出错,程序也能立马报错,小明猜想这其中一定有一套检验机 制在,他想自己尝试完成这套检验机制。 输入 一串括号序列(无空格),若匹配成功则输出"Yes",否则输出"No"。
【输入1】 ()()() 【输出1】 Yes
【输入2】 ()( 【输出2】 No
【输入3】 ((())) 【输出3】 Yes
【输入4】 ((((())) 【输出4】 No
3699

被折叠的 条评论
为什么被折叠?



