关于线性表的一些总结——关于栈(2)

it2022-05-05  135

基本的手打链栈方法模板已经写了,继续写一下常用的stl栈的用法。

运用这几个操作首先要记得用头文件#include<stack>,此头文件中包含有封装好的栈操作函数。

基本操作有以下几个:

push() 会将一个元素放入stack中。top() 会返回stack中的栈顶元素,返回的是reference,可以就地修改值。pop() 删除栈顶top元素。size() 返回stack长度。empty() 返回stack是否为空。

运用方法为以下样例所指:

(我是在官网上搞得,但没完全抄,稍微精简一下,毕竟官网英文令人头大。如果英语水平足够可以直接去官网,传送门:

http://www.cplusplus.com/reference/stack/stack/?kw=stack )

1、push() 在顶部插入一个新元素,高于其目前的top元素(就是变成栈顶)。

#include <iostream> #include <stack> int main () { std::stack<int> mystack;//调用stl函数库 for (int i=0; i<5; ++i) mystack.push(i); std::cout << "Popping out elements..."; while (!mystack.empty())//当函数库不为空 { std::cout << ' ' << mystack.top(); mystack.pop(); } std::cout << '\n'; return 0}

2、top()

返回栈顶元素的值。 由于堆栈是后进先出容器,因此顶部元素是插入堆栈的最后一个元素。

// stack::top #include <iostream> #include <stack> int main () { std::stack<int> mystack;//定义创建新的栈 mystack.push(10); mystack.push(20);//插入新元素10、20 mystack.top() -= 5;//返回栈顶元素 std::cout << "mystack.top() is now " << mystack.top() << '\n'; return 0; }

3、pop()

删除栈顶部的元素。删除的元素是插入到的最新元素,其值可以通过调用成员来检索 stack::top。

// stack::push/pop #include <iostream> #include <stack> int main () { std::stack<int> mystack; for (int i=0; i<5; ++i) mystack.push(i); std::cout << "Popping out elements..."; while (!mystack.empty())//当栈不为空 { std::cout << ' ' << mystack.top(); mystack.pop();//删除栈顶元素 } std::cout << '\n'; return 0; }Edit & Run//这里我没明白是干嘛的但不影响我使用stl,后续将查询进行补充

4、size() 给出栈中的元素数量。

// stack::size #include <iostream> #include <stack> int main () { std::stack<int> myints;//定义栈myints std::cout << "0. size: " << myints.size() << '\n';//初始化并输出元素数量,即为0 for (int i=0; i<5; i++) myints.push(i); std::cout << "1. size: " << myints.size() << '\n';//插入元素并输出栈中元素个数,为5 myints.pop();//删除栈顶元素 std::cout << "2. size: " << myints.size() << '\n';//然后元素就只有4个了 return 0; }

5、empty()

判断是否栈是空的:即它的大小是否为零。

// stack::empty #include <iostream> #include <stack> int main () { std::stack<int> mystack;//创建栈mystack int sum (0); for (int i=1;i<=10;i++) mystack.push(i);//让元素1~10入栈 while (!mystack.empty())//当栈不为空 { sum += mystack.top();//栈顶元素赋值给sum,1+2+...+10=sum mystack.pop();//栈顶元素出栈 } std::cout << "total: " << sum << '\n';//输出栈中元素总和 return 0; }

特别提醒:

虽然stl在我们看来真的比手打方便多了,但两个多要会啊!!!

手打 is important!

竞赛中像优先队列之类的,提倡用stl,毕竟技术含量小,考察力度不大。但像栈这种重要的数据结构,全用封装好的stack,是会影响整个程序的运行速度的。如果题目复杂,我们最好先考虑好时间复杂度,再做决定。

小声bb:栈很容易错的。(经常看见大佬们翻车

大佬们请自动忽略我的提醒,蒟蒻在此角落。

如果有发现我的错误,欢迎指出。

感谢大家。


最新回复(0)