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

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

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

基本操作有以下几个:

  1. push() 会将一个元素放入stack中。
  2. top() 会返回stack中的栈顶元素,返回的是reference,可以就地修改值。
  3. pop() 删除栈顶top元素。
  4. size() 返回stack长度。
  5. 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:栈很容易错的。(经常看见大佬们翻车

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

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

感谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值