独自空忆成欢 提交于 2020-02-16 09:26:36

1.定义:利用一组地址连续的存储单元依次自栈底到栈顶存放栈的数据元素.
(而栈顶是随着插入和删除而变化的,可以用一个整形变量top存放栈顶的指针,数据入栈或出栈时使整形变量 top分别加1或减1。)
2.栈的基本操作:
(1)初始化栈 stackvis ,定义一个栈
(2)入栈 vis.push(x)
(3)出栈 vis.pop()
(4)判断是否为空 vis.empty()
(5)判断栈中元素的数量vis.size()
(6)得到栈的栈顶元素 vis.top()
综上: #include
用<bits/stdc++.h>则无需考虑头文件.
题目
problem A:栈-程序员输入问题
nefu 1624

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
 int main()
 {
  stack<char>s1;
  stack<char>s2;
   char a[100];
   int i,n;
   gets(a);
   n= strlen(a);
   for(i=0;i<n;i++)
   {
       if(a[i]=='@')
       {
           while(!s1.empty())
               s1.pop();
           continue;
       }
      else if(a[i]=='#')
       {
         if(!s1.empty())
         s1.pop();
         continue;
       }
       else s1.push(a[i]);
   }
   while(!s1.empty())
   {
       s2.push(s1.top());
       s1.pop();
   }
   while(!s2.empty())
   {printf("%c",s2.top());
   s2.pop();}
   printf("\n");
   return 0;
 }

problem B:栈-括号匹配
nefu 1630

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
char a[300];
 int main()
 {
  stack<char>s;
   int i,n;
   scanf("%s",a);
   n=strlen(a);
   for(i=0;i<n;i++)
   {
      if(s.empty())
      s.push(a[i]);
    else
      {
        if(s.top()=='('&&a[i]==')')
            s.pop();
        else if (s.top()=='['&&a[i]==']')
         s.pop();
          else  s.push(a[i]);
      }
   }
    if(s.empty())
        printf("OK\n");
    else
        printf("Wrong\n");

   return 0;
 }

problem C:栈-溶液模拟器
nefu 1627

#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
#include <stack>
using namespace std;
typedef struct /*rongye*/{
int v;
double c;
}liquid;/*由于有typedef所以liquid在这里不是变量,而是结构体的类型,liquid=struct rongye*/
stack<liquid>vis;
 int main()
 {
   int v0,v1,v2,v3,n;
   double c0,c1,c2,c3;
   string str;/*string简化了定义字符数组的麻烦,直接写str即可*/
   ios::sync_with_stdio(false);
   cin>>v0>>c0>>n;
   vis.push({v0,c0});/*把一组数压入栈内,结构体入栈*/
   while(n--)
   {  cin>>str;
       if(str=="P")/*string输入记得写成”“*/
       {
           liquid tmp=vis.top();
           v1=tmp.v;
           c1=tmp.c;
           cin>>v2>>c2;
           v3=v1+v2;
           c3=(v1*c1+v2*c2)/v3;
           printf("%d %.5lf\n",v3,c3);
           vis.push({v3,c3});/*新数组压入栈*/

       }
       if(str=="Z")
       {
           if(vis.size()==1)
            printf("%d %.5lf\n",v0,c0);
           if(vis.size()>1)
            {vis.pop();
            liquid tmp=vis.top();
           printf("%d %.5lf\n",tmp.v,tmp.c);
            }
       }
   }
   return 0;
 }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!