一,实现栈

 int s[100005],tot=0;

#define push(x) s[++tot]=x

#define pop tot--

#define size tot

#define top s[tot] 

二,这个东西虽然有点简陋,但还是可以的。

我觉得把这个东西按照,我习惯的结构体改一下。

 1 struct stack
 2 {
 3     int tot=0;
 4     int s[1000005];
 5     void push(int x)
 6     {
 7         s[++tot]=x;
 8     }
 9     void pop()
10     {
11         tot--;
12     }
13     //必有出栈入栈 
14     int size()
15     {
16         return tot;
17     }
18     int top()
19     {
20         return s[tot];
21     }
22     //说实话,这两个操作就有点奇怪了。 
23     //返回栈顶元素和栈内元素个数。 
24 }q; 

三,

你想过结构题内最后两个功能为什么队列和栈不一样嘛?

噢,。。front和top一样的意思。

只是最后一个功能不一样,

队列是empty(),栈是size()

说实话我感觉这两个一样。

四,

(上面写的不错,可惜我要的是单调栈)

单调栈洛谷有一道模板题。

P5788。

1,我用非单调队列做了一遍。。还得了个一半多的分

 1 #include<iostream>
 2 using namespace std;
 3 int n,s[10000005],ans[100005];
 4 int main(){
 5     cin>>n;
 6     for(int i=1;i<=n;i++)
 7         cin>>s[i];
 8     for(int i=1;i<=n;i++)
 9     {
10         int mark=s[i];
11     
12         for(int j=i;j<=n;j++)
13         {
14         
15             if(s[j]>mark)
16             {
17                 ans[i]=j;
18                 break;
19             }
20         }
21     }
22     for(int i=1;i<=n-1;i++)
23        cout<<ans[i]<<" ";
24     cout<<"0";
25     
26 }

2,当然要考虑怎么用单调栈。

你知道我设计的单调栈问题出在哪了吗?就比如拿样例说话

5
1 4 2 3 5
当你考虑第二个的时候,不停地往进放,当你放到第四个元素,也就是3的时候,因为每次跟栈顶比较,3比2大,此时记录的是4,
但是,你要比的是4.。你要比四大的数唉。
posted @ 2019-12-14 16:28  北月真好  阅读(201)  评论(0编辑  收藏  举报